регулярное выражение, чтобы также соответствовать акцентированные символы

У меня есть следующий код PHP:

$search = "foo bar que";
$search_string = str_replace(" ", "|", $search);

$text = "This is my foo text with qué and other accented characters.";
$text = preg_replace("/$search_string/i", "<b>$0</b>", $text);

echo $text;

Очевидно, «que» не соответствует «qué». Как я могу это изменить? Есть ли способ сделать preg_replace игнорировать все акценты?

Символы, которые должны соответствовать (испанский):

á,Á,é,É,í,Í,ó,Ó,ú,Ú,ñ,Ñ

Я не хочу заменять все акцентированные символы перед применением регулярного выражения, потому что символы в тексте должны оставаться такими же:

«Это мое Foo текст с qué и другие акцентированные символы. «

и не

«Это мое Foo текст с дие и другие акцентированные символы. «

4

Решение

$search = str_replace(
['a','e','i','o','u','ñ'],
['[aá]','[eé]','[ií]','[oó]','[uú]','[nñ]'],
$search)

Это и то же самое для верхнего регистра будет жаловаться на ваш запрос. Примечание: ñ заменитель звучит для меня неверно, так как «niño» полностью отличается от «nino»

0

Другие решения

Если вы хотите использовать захваченный текст в строке замены, вы должны использовать классы символов в $search переменная (во всяком случае, вы устанавливаете ее вручную):

$search = "foo bar qu[eé]"

И так далее.

1

Решение, которое я наконец использовал:

$search_for_preg = str_ireplace(["e","a","o","i","u","n"],
["[eé]","[aá]","[oó]","[ií]","[uú]","[nñ]"],
$search_string);

$text = preg_replace("/$search_for_preg/iu", "<b>$0</b>", $text)."\n";
1

Вы можете попробовать определить массив следующим образом:

$vowel_replacements = array(
"e" => "eé",
// Other letters mapped to their other versions
);

Затем, прежде чем ваш preg_match позвони, сделай что-то вроде этого:

foreach ($vowel_replacements as $vowel => $replacements) {
str_replace($search_string, "$vowel", "[$replacements]");
}

Если я правильно помню свой PHP, это должно заменить ваши гласные на класс символов их акцентированных форм — что сохранит их на месте. Это также позволяет вам изменить строку поиска гораздо проще; Вы не должны помнить, чтобы заменить гласные на их классы персонажей. Все, что вам нужно помнить, это использовать форму без акцента в строке поиска.

(Если есть какой-то особый синтаксис, я забываю, что делает это без foreachПожалуйста, прокомментируйте и дайте мне знать.)

0
По вопросам рекламы [email protected]