Регулярное выражение для сопоставления строки, начинающейся с «stop» - PullRequest
80 голосов
/ 06 августа 2009

Как создать регулярное выражение, соответствующее слову в начале строки. Мы ищем совпадение stop в начале строки, и все может следовать за ним.

Например, выражение должно соответствовать:

stop
stop random
stopping

Спасибо.

Ответы [ 8 ]

154 голосов
/ 06 августа 2009

Если вы хотите сопоставить только строки, начинающиеся с остановки, используйте

^stop

Если вы хотите сопоставить строки, начинающиеся со слова stop, после пробела

^stop\s

Или, если вы хотите сопоставить строки, начинающиеся со слова стоп, но за которыми следуют либо пробел, либо любой другой символ, не содержащий слов, который вы можете использовать (если вы допускаете использование регулярных выражений)

^stop\W

С другой стороны, то, что следует, соответствует слову в начале строки в большинстве разновидностей регулярных выражений (в этих разновидностях \ w соответствует противоположности \ W)

^\w

Если ваш аромат не имеет ярлыка \ w, вы можете использовать

^[a-zA-Z0-9]+

Будьте осторожны, что эта вторая идиома будет совпадать только с буквами и цифрами, без каких-либо символов.

Обратитесь к своему руководству по регулярным выражениям, чтобы узнать, какие ярлыки разрешены и какие именно они соответствуют (и как они работают с Юникодом).

63 голосов
/ 06 августа 2009

Попробуйте это:

/^stop.*$/

Пояснение:

  • / символы разграничивают регулярное выражение (т.е. они не являются частью регулярного выражения как таковые)
  • ^ означает совпадение в начале строки
  • . , за которым следует * означает совпадение с любым символом (.), Любое количество раз (*)
  • $ означает конец строки

Если вы хотите, чтобы за этой остановкой следовал пробел, вы можете изменить RegEx следующим образом:

/^stop\s+.*$/
  • \ s означает любой символ пробела
  • + после \ s означает, что должен быть хотя бы один пробельный символ, следующий за стоп-словом

Примечание: также имейте в виду, что приведенный выше RegEx требует, чтобы за стоп-словом следовал пробел! Таким образом, он не будет соответствовать строке, которая содержит только: stop

18 голосов
/ 10 декабря 2015

Если вы хотите сопоставить что-либо после остановки слова, не только в начале строки, вы можете использовать: \bstop.*\b - слово, за которым следует строка

Word till the end of string

Или, если вы хотите сопоставить слово в строке, используйте \bstop[a-zA-Z]* - только слова, начинающиеся со стопа

Only the words starting with stop

Или начало строк с остановом ^stop[a-zA-Z]* только для слова - только для первого слова
Вся строка ^stop.* - только первая строка строки

И если вы хотите сопоставить каждую строку, начинающуюся с остановки, включая переводы строки, используйте: /^stop.*/s - многострочная строка, начинающаяся с остановки

14 голосов
/ 10 декабря 2017

Как сказал @SharadHolani. Это не будет соответствовать каждому слову, начинающемуся с " stop "

. Только если он находится в начале строки, такой как " stop go ". @ Ваксо дал правильный ответ:

Это немного лучше, если вы хотите сопоставить любое слово, начинающееся с " stop " и содержащее только буквы из От А до Я .

\bstop[a-zA-Z]*\b

Это будет соответствовать всем

стоп (1)

стоп случайный (2)

остановка (3)

хочу остановить (4)

пожалуйста стоп (5)

Но

/^stop[a-zA-Z]*/

будет соответствовать только (1) до (3), но не (4) и (5)

6 голосов
/ 06 августа 2009

Если вы хотите сопоставить что-либо, начинающееся с «остановки», включая «остановка движения», «остановка» и «остановка», используйте:

^stop

Если вы хотите сопоставить слово stop, за которым следует что-нибудь, например, "stop go", "stop this", но не "stop" и не "stop", используйте:

^stop\W
6 голосов
/ 06 августа 2009
/stop([a-zA-Z])+/

Будет соответствовать любому стоп-слову (останов, остановка, остановка и т. Д.)

Однако, если вы просто хотите сопоставить «стоп» в начале строки

/^stop/

сделает: D

0 голосов
/ 04 декабря 2017

Если вы хотите, чтобы слово начиналось с «стоп», вы можете использовать следующий шаблон. "^ Остановка. *"

Это будет соответствовать словам, начинающимся со стопа, за которым следует что-либо.

0 голосов
/ 06 августа 2009

Я бы посоветовал против простого подхода регулярного выражения к этой проблеме. Слишком много слов, которые являются подстроками других несвязанных слов, и вы, вероятно, сведете с ума, пытаясь переопределить более простые решения, которые уже были предоставлены.

Вам понадобится, по крайней мере, наивный алгоритм обработки (попробуйте использовать средство определения скорости Porter; в большинстве языков есть свободный код) для первой обработки текста. Храните этот обработанный текст и предварительно обработанный текст в двух отдельных массивах, разделенных пробелами. Убедитесь, что каждый не алфавитный символ также получает свой собственный индекс в этом массиве. Какой бы список слов вы не фильтровали, используйте их также.

Следующим шагом будет поиск индексов массива, которые соответствуют вашему списку «стоп» слов. Удалите их из необработанного массива, а затем присоединитесь к пробелам.

Это только немного сложнее, но будет гораздо более надежным подходом. Если у вас есть какие-либо сомнения в ценности более ориентированного на НЛП подхода, вы, возможно, захотите провести исследование общих ошибок .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...