У меня есть выражение регулярного выражения, которое я использую, чтобы найти все слова в заданном блоке содержимого без учета регистра, которые содержатся в глоссарии, хранящемся в базе данных. Вот моя выкройка:
/($word)/i
Проблема в том, что если я использую /(Foo)/i
такие слова, как « Food
найти соответствие». С обеих сторон слова должны быть пробелы или граница слова.
Как я могу изменить свое выражение, чтобы оно соответствовало только слову, Foo
если оно является словом в начале, середине или конце предложения?
regex
word-boundary
Аарон
источник
источник
\b(<|>=)\b
не совпадает>=
\b[-|+][0-9]+\b
матч+10
в43E+10
. Я не хочу обоих.Чтобы сопоставить любое слово целиком, используйте шаблон
(\w+)
Предполагая, что вы используете PCRE или что-то подобное:
Выше снимок экрана взят из этого живого примера: http://regex101.com/r/cU5lC2
Соответствие любому целому слову в командной строке с помощью
(\w+)
Я буду использовать интерактивную оболочку phpsh в Ubuntu 12.10, чтобы продемонстрировать механизм регулярных выражений PCRE с помощью метода, известного как preg_match.
Запустите phpsh, поместите содержимое в переменную, совпадение по слову.
el@apollo:~/foo$ phpsh php> $content1 = 'badger' php> $content2 = '1234' php> $content3 = '$%^&' php> echo preg_match('(\w+)', $content1); 1 php> echo preg_match('(\w+)', $content2); 1 php> echo preg_match('(\w+)', $content3); 0
Метод preg_match использовал PCRE двигатель в языке PHP для анализа переменных:
$content1
,$content2
и$content3
с(\w)+
рисунком.$ content1 и $ content2 содержат хотя бы одно слово, $ content3 - нет.
Сопоставьте количество буквальных слов в командной строке с
(dart|fart)
el@apollo:~/foo$ phpsh php> $gun1 = 'dart gun'; php> $gun2 = 'fart gun'; php> $gun3 = 'farty gun'; php> $gun4 = 'unicorn gun'; php> echo preg_match('(dart|fart)', $gun1); 1 php> echo preg_match('(dart|fart)', $gun2); 1 php> echo preg_match('(dart|fart)', $gun3); 1 php> echo preg_match('(dart|fart)', $gun4); 0
переменные gun1 и gun2 содержат строку dart или fart. gun4 - нет. Однако поиск
fart
совпадений слов может быть проблемойfarty
. Чтобы исправить это, установите границы слов в регулярном выражении.Сопоставьте буквальные слова в командной строке с границами слов.
el@apollo:~/foo$ phpsh php> $gun1 = 'dart gun'; php> $gun2 = 'fart gun'; php> $gun3 = 'farty gun'; php> $gun4 = 'unicorn gun'; php> echo preg_match('(\bdart\b|\bfart\b)', $gun1); 1 php> echo preg_match('(\bdart\b|\bfart\b)', $gun2); 1 php> echo preg_match('(\bdart\b|\bfart\b)', $gun3); 0 php> echo preg_match('(\bdart\b|\bfart\b)', $gun4); 0
Так что же , как и в предыдущем примере , за исключением , что слово
fart
с\b
границей слова не существует в содержании:farty
.источник
Использование
\b
может дать удивительные результаты. Вам будет лучше выяснить, что отделяет слово от его определения, и включить эту информацию в свой шаблон.#!/usr/bin/perl use strict; use warnings; use re 'debug'; my $str = 'S.P.E.C.T.R.E. (Special Executive for Counter-intelligence, Terrorism, Revenge and Extortion) is a fictional global terrorist organisation'; my $word = 'S.P.E.C.T.R.E.'; if ( $str =~ /\b(\Q$word\E)\b/ ) { print $1, "\n"; }
Вывод:
источник
использовать границы слов \ b,
В моей среде работает следующее (с использованием четырех экранирований): Mac, safari Version 10.0.3 (12602.4.8)
var myReg = new RegExp(‘\\\\b’+ variable + ‘\\\\b’, ‘g’)
источник
Для тех, кто хочет проверить Enum в своем коде, вы можете следовать руководству
В Regex World вы можете использовать как
^
для начала строки, так и$
для ее завершения. Использование их в сочетании с|
может быть тем, что вы хотите:^(Male)$|^(Female)$
Он вернет true только для случая
Male
илиFemale
.источник
^
и$
соответствует началу (соответственно концу) строки, поэтому ваш пример будет соответствовать, только если это единственные слова в строке.Если вы делаете это в Notepad ++
[\w]+
Дала бы вам слово целиком, и вы можете добавить скобки, чтобы получить его как группу. Пример:
conv1 = Conv2D(64, (3, 3), activation=LeakyReLU(alpha=a), padding='valid', kernel_initializer='he_normal')(inputs)
. Я хотел бы перейтиLeakyReLU
в отдельную строку в качестве комментария и заменить текущую активацию. В блокноте ++ это можно сделать с помощью следующей команды find:([\w]+)( = .+)(LeakyReLU.alpha=a.)(.+)
и команда замены становится:
\1\2'relu'\4 \n # \1 = LeakyReLU\(alpha=a\)\(\1\)
Пробелы предназначены для сохранения правильного форматирования в моем коде. :)
источник
Получить все "слова" в строке
/([^\s]+)/g
источник