У меня есть функция, которая использует preg_match для проверки наличия подстроки в другой строке. Сегодня я понимаю, что если подстрока имеет специальные символы, такие как специальные символы регулярного выражения (. \ + *? [^] $() {} =! <> |: -) или @, мой preg_match не может найти подстроку четную хотя он есть.preg_match: не удается найти подстроку, которая имеет завершающие специальные символы
Это работает, возвращается «Матч был найден».
$find = "website scripting";
$string = "PHP is the website scripting language of choice.";
if (preg_match("/\b" . $find . "\b/i", $string)) {
echo "A match was found.";
} else {
echo "A match was not found.";
}
Но это не означает, что «матч не найден».
$find = "website scripting @";
$string = "PHP is the website scripting @ language of choice.";
if (preg_match("/\b" . $find . "\b/i", $string)) {
echo "A match was found.";
} else {
echo "A match was not found.";
}
Я пробовал preg_quote, но это не поможет.
Благодарим за любые предложения!
Редактировать: граница Word обязательна, поэтому я использую \ b. Я не хочу найти «телефон» в «смартфоне».
'preg_quote' должен работать, вы можете повторить из' preg_quote ($) найти '' – MarshallOfSound
preg_quote' не будет работать, так как у вас есть '\ b' в конце. Удалите его, если вам не нужно проверять конечную границу слова. –
Не совсем понятно, какое поведение вы хотите использовать в строке поиска, например ') @ # * $ ek2' или' abc% 'или' abcdef' (обратите внимание на пробел в конце). – nhahtdh