Bardzo proste wyrażenie regularne nie działa

Bardzo proste wyrażenie regularne nie działa

Aktualizacja :Jak wskazała inna odpowiedź, @ nie jest znakiem słowa, więc nie ma granicy między @ i przestrzeń. Jako obejście możesz zamiast tego użyć negatywnego spojrzenia w tył:

@"(?<!\w)@p1\b"

Oryginalna odpowiedź :Potrzebujesz @ przed Twoimi wyrażeniami regularnymi:

@"\[email protected]\b"

Bez tego ciąg "\b" jest interpretowany jako backspace (znak 8), a nie jako granica słowa wyrażenia regularnego. Więcej informacji na temat literałów ciągu znaków w cudzysłowie @ jest dostępnych w witrynie MSDN.

Alternatywnym sposobem bez używania @-cytowanych literałów ciągów jest uniknięcie ukośników odwrotnych:

"\\[email protected]\\b"

Drugi przypadek jest rozwiązany przez @"\bINSERT\b" jak podano w innej odpowiedzi.

Jednak /b mecze o:

  • Przed pierwszym znakiem w ciągu, jeśli pierwszy znak jest znakiem słowa.
  • Po ostatnim znaku w ciągu, jeśli ostatnim znakiem jest znak słowa.
  • Między dwoma znakami w ciągu, gdzie jeden jest znakiem słowa, a drugi nie jest znakiem słowa.

Znak słowa jest jednym z [a-zA-Z0-9_] więc pierwszego przypadku nie da się rozwiązać przez przedrostek @ aby uciec przed \b znak, ponieważ próbujesz następnie dopasować znak niebędący słowem (@ ).

Aktualizacja: Pierwszy przypadek można rozwiązać za pomocą negatywnej asercji patrzącej w tył, ale także za pomocą zanegowanej granicy słowa \B co skutkuje czystszą składnią (@"\[email protected]\b" ).