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"
).