Регулярное выражение: укажите "пробел или начало строки" и "пробел или конец строки"
Представьте, что вы пытаетесь сопоставить образец с "stackoverflow".
Вы хотите следующее:
this is stackoverflow and it rocks [MATCH]
stackoverflow is the best [MATCH]
i love stackoverflow [MATCH]
typostackoverflow rules [NO MATCH]
i love stackoverflowtypo [NO MATCH]
Я знаю, как разобрать stackoverflow, если у него есть пробелы на обоих сайтах, используя:
/\s(stackoverflow)\s/
То же самое, если его в начале или конце строки:
/^(stackoverflow)\s/
/\s(stackoverflow)$/
Но как указать "пробел или конец строки" и "пробел или начало строки" с помощью регулярного выражения?
Ответы
Ответ 1
Вы можете использовать любое из следующего:
\b #A word break and will work for both spaces and end of lines.
(^|\s) #the | means or. () is a capturing group.
/\b(stackoverflow)\b/
Также, если вы не хотите включать пробел в ваш матч, вы можете использовать lookbehind/forwards.
(?<=\s|^) #to look behind the match
(stackoverflow) #the string you want. () optional
(?=\s|$) #to look ahead.
Ответ 2
(^|\s)
будет соответствовать пробелу или началу строки и ($|\s)
для пробела или конца строки. Вместе это:
(^|\s)stackoverflow($|\s)
Ответ 3
Вот что я буду использовать:
(?<!\S)stackoverflow(?!\S)
Другими словами, сопоставьте "stackoverflow", если ему не предшествует символ без пробелов, а не символ без пробелов.
Это более аккуратно (IMO), чем подход "космос-или-якорь", и он не предполагает, что строка начинается и заканчивается символами слов, такими как подход \b
.
Ответ 4
\b
соответствует границам слов (без фактического соответствия любым символам), поэтому следующее должно делать то, что вы хотите:
\bstackoverflow\b