Я не смог понять это.
Мне нужно сопоставить все эти строки путем сопоставления whole
и его окружение подчеркивает (в одном выражении регулярного выражения):
whole_anything
anything_whole
anything_whole_anything
но это не должно соответствовать этому
anythingwholeanything
anything_wholeanything
anythingwhole_anything
Это означает … сделать выражение регулярного выражения, соответствующую фразу whole
только если это подчеркивание до, после или оба. Нет, если нет подчеркивания.
Следующие
preg_match("/(whole_|_whole_|_whole)/",string)
это не решение;)
2015/02/09 Редактировать: добавлены условия 5. и 6. для уточнения
Еще одна альтернатива. Таким образом, мы проверяем наличие границы слова или _
как до, так и после whole
, но мы исключаем слово whole
сам по себе через негативный взгляд.
(?!\bwhole\b)((?:_|\b)whole(?:_|\b))
Вы можете уменьшить количество случаев в альтернативах:
preg_match('/(_whole_?|whole_)/', $string);
Если есть подчеркивание перед, подчеркивание после является необязательным. Но если до этого нет подчеркивания, требуется подчеркивание после.
Вы можете использовать переменную PHP, чтобы решить проблему ввода слова дважды:
$word = preg_quote('whole');
preg_match("/(_{$word}_?|{$word}_)/", $string);
Вы можете исключить все буквенно-цифровые символы до и после. К сожалению, вы не можете использовать \w
так как _
считается словом символа
([^a-zA-Z0-9])_?whole_?([^a-zA-Z0-9])
Это исключит алфавитно-цифровые символы «до» и «после», а подчеркивание впереди, сзади или в обоих случаях необязательно. Если ничего не существует, оно не может совпадать, потому что оно может начинаться с буквы или цифры. Вы можете изменить его, чтобы включить специальные символы и многое другое.