Grubers новое и улучшенное распознавание URL регулярное выражение - PullRequest
0 голосов
/ 26 августа 2010

Я пытался использовать grubers последнее регулярное соответствие URL в регулярном выражении в проекте php.

Чтобы проверить это, я собрал что-то очень простое:

$regex = "(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:"'.,<>?«»“”‘’]))";

$array = pret_match_all($regex, $theblockofurltext);

print_r($array);

Первая проблема заключалась в том, что «бы избежать строки, в зависимости от того, с чем я обернул регулярное выражение, поэтому я просто удалил его. Использование это личное, и у меня никогда не будет» где-либо рядом с URL.Это оставило меня с новым регулярным выражением.

$regex = "(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'.,<>?«»“”‘’]))";

Устраиваясь, я запустил свой маленький скрипт, и он дал мне следующую ошибку:

Warning: preg_split() [function.preg-split]: Unknown modifier '\' in D:\wwwroot\xxx\index.php on line 14

К сожалению, мой класс REGEX в школе не былНе нужно учить где-либо вблизи уровней этого регулярного выражения, и я понятия не имею, с чего начать, чтобы исправить это для использования с PHP.Любая помощь будет принята с благодарностью.Без сомнения, я, вероятно, тоже делаю что-то глупое, поэтому, пожалуйста, будьте осторожны со мной:)

Jon

Ответы [ 2 ]

2 голосов
/ 26 августа 2010

Добавьте # до и после вашего RE.

$regex = "#(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'.,<>?«»“”‘’]))#";
1 голос
/ 26 августа 2010

Если вы используете PCRE , регулярное выражение должно быть заключено в разделители .Теперь круглые скобки () также могут быть разделителями, поэтому движок думает, что ваше выражение имеет значение только (?i) и интерпретирует следующие \ как модификатор.

Вы можете использовать ~ как разделитель

$regex = "~(?i)\b...]))~";

Обновление:

Я не знаю, поддерживает ли PHP частичное изменение выражения с помощью (?i).Таким образом, вам, возможно, придется удалить это и поместить вместо этого модификатор после разделителя (вы все равно применяете его ко всему выражению):

$regex = "~\b...]))~i";

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...