Я хочу сопоставить регулярное выражение со всем словом.
В следующем примере я пытаюсь соответствовать s
или season
но то , что у меня есть спички s
, e
, a
, o
и n
.
[s|season]
Как сделать так, чтобы регулярное выражение соответствовало целому слову?
regex
expression
word
NMGod
источник
источник
(season|s)
Вместо этого используйте .[season]
соответствует любомуs
,e
,a
,o
,n
.Ответы:
Квадратные скобки предназначены для класса символов, и вы на самом деле пытаетесь соответствовать любому из:
s
,|
,s
(опять же ),e
,a
,s
(опять же ),o
иn
.Вместо этого используйте круглые скобки для группировки:
или не захватывающая группа:
Примечание: группы без захвата сообщают движку, что ему не нужно сохранять совпадение, в то время как другая (группа захвата делает). Для мелких вещей либо работает, для «тяжелых» вещей, вы можете сначала посмотреть, нужен ли вам матч или нет. Если вы этого не сделаете, лучше используйте группу без захвата, чтобы выделить больше памяти для вычислений, вместо того, чтобы хранить то, что вам никогда не понадобится.
источник
?:
Внутри группировка акаnon-capturing
просто говорит, что вы не можете использовать совпавшие выражения с$1
,$2
и так далее ... Если вы хотите , чтобы выражение не соответствует, что вам нужно^
.(?! ... )
вставку, то есть(?!s|season)
в данном случае.Используйте этот живой онлайн-пример, чтобы проверить свой паттерн:
Выше снимок экрана взят из этого живого примера: https://regex101.com/r/cU5lC2/1
Соответствие любому целому слову в командной строке.
Я буду использовать интерактивную оболочку phpsh в Ubuntu 12.10, чтобы продемонстрировать механизм регулярных выражений PCRE с помощью метода, известного как preg_match.
Запустите phpsh, поместите содержимое в переменную, совпадение по слову.
Метод preg_match использовал PCRE двигатель в языке PHP для анализа переменных:
$content1
,$content2
и$content3
с(\w)+
рисунком.$ content1 и $ content2 содержат хотя бы одно слово, $ content3 - нет.
Сопоставление определенных слов в командной строке без условных обозначений слов
Переменные
gun1
иgun2
содержат строкуdart
илиfart
правильную, но gun3 содержитdarty
и все еще совпадает, вот в чем проблема. Итак, следующий пример.Сопоставьте определенные слова в командной строке с границами слов:
Границы слов могут быть принудительно сопоставлены
\b
, см .:Визуальное изображение Regex, полученное с http://jex.im/regulex и https://github.com/JexCheng/regulex Пример:
\b
Утверждает , что мы имеем границу слова, убедившись , что «дротик» подобран, но «Darty» нет.источник
Тестирую примеры на js. Самое простое решение - просто добавьте слово u внутри / /:
Теперь, если вам нужно именно это слово с границами, а не внутри каких-либо других знаков-букв. Используем маркер b :
У нас также есть метод exec () в js, который возвращает объект-результат. Это помогает fg получить информацию о месте / индексе нашего слова.
Если нам нужно получить все совпадающие слова в строке / предложении / тексте, мы можем использовать модификатор g (глобальное совпадение):
Теперь последнее - мне нужно не одно конкретное слово, а несколько из них. Мы используем | знак, это означает выбор / или.
источник
[ ]
определяет класс персонажа. Таким образом, каждый установленный вами символ будет совпадать.[012]
будет соответствовать0
или1
или2
и[0-2]
ведет себя одинаково.Вам нужны группировки для определения оператора или. Используйте
(s|season)
для своего вопроса.Btw. вы должны быть осторожны. Метасимволы в обычном регулярном выражении (или внутри группы) отличаются от класса символов. Класс символов подобен подъязыку.
[$A]
будет соответствовать только$
илиA
, ничего больше. За доллар здесь не сбежать.источник