заменить слова в тексте игнорировать URL - PullRequest
4 голосов
/ 23 июня 2010

я использую эту строку для поиска имени в тексте с URL-адресами.

$name = "xxx";
$text = "my name is xxx en my website is http://xxx.something.com";
$text = preg_replace("/\b(".preg_quote($name, "/").")\b/i", $url, $text);

как я могу изменить это регулярное выражение, чтобы игнорировать URL-адреса в тексте

Ответы [ 2 ]

1 голос
/ 23 июня 2010

Не совсем то, что вы ищете, но может помочь:

Замените xxx на yyy тогда и только тогда, когда xxx окружен пробелами или если он находится в началеконец строки.

<?
$name = "xxx";
$text = "xxx my name is xxx en my website xxx is http://xxx.something.com xxx";
$text = preg_replace("%(?<=^| )".$name."(?= |$)%i", "yyy", $text);
echo $text."\n";
//yyy my name is yyy en my website yyy is http://xxx.something.com yyy
?>

Было бы проще, если бы PHP поддерживал переменную длину, просматривая утверждения;потому что тогда мы могли бы использовать более точный (?<!http://[^ ]+)\bxxx\b

1 голос
/ 23 июня 2010

1) Вы можете использовать регулярное выражение, чтобы найти все URL (например, http://snipplr.com/view/2371/regex-regular-expression-to-match-a-url/) - запомните их позиции и длину

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

3) просмотрите результаты 2) и проверьте, не содержится ли слово в URL.

...