Регулярное выражение, с которым я работаю в Ruby, отсутствует в PHP; что может быть причиной? - PullRequest
0 голосов
/ 30 июня 2009

Я не знаю, рубин. Я пытаюсь использовать следующее регулярное выражение, сгенерированное ruby ​​(а именно http://www.a -k-r.org / abnf / , работающее на грамматике, заданной rfc1738) в php Не удается найти совпадение в php, но оно успешно совпадает в ruby. Кто-нибудь видит разницу между обработкой регулярных выражений в php и ruby, которая может объяснить это несоответствие?

http:\/\/(?:(?:(?:(?:[0-9a-z]|[0-9a-z](?:[\x2d0-9a-z]?)*[0-9a-z])\x2e)?)*(?:[a-z]|[a-z](?:[\x2d0-9a-z]?)*[0-9a-z])|\d+\x2e\d+\x2e\d+\x2e\d+)(?::\d+)?(?:\/(?:(?:[!\x24'-\x2e0-9_a-z]|%[0-9a-f][0-9a-f]|[&:;=@])?)*(?:(?:\/(?:(?:[!\x24'-\x2e0-9_a-z]|%[0-9a-f][0-9a-f]|[&:;=@])?)*)?)*(?:\x3f(?:(?:[!\x24'-\x2e0-9_a-z]|%[0-9a-f][0-9a-f]|[&:;=@])?)*)?)?/i

Так как вы все любите , вы так много тестируете, как насчет альтернативного решения. Учитывая ABNF в rfc, я хочу способ (в php) проверить, есть ли в грамматике произвольная строка.

APG не удается скомпилировать в 64-битной системе,

VTC не F ree,

и я не нашел других подобных инструментов. Я также предпочел бы не использовать регулярные выражения, но это самый близкий к моему успеху.

1 Ответ

1 голос
/ 30 июня 2009

Было бы неплохо увидеть пример кода, который вы пытались использовать в PHP, но попробуйте следующее (не забудьте заменить $ _SERVER ["HTTP_REFERER"] на вашу входную переменную):

if (preg_match('#http://(?:(?:(?:(?:[0-9a-z]|[0-9a-z](?:[\\x2d0-9a-z]?)*[0-9a-z])\\x2e)?)*(?:[a-z]|[a-z](?:[\\x2d0-9a-z]?)*[0-9a-z])|\\d+\\x2e\\d+\\x2e\\d+\\x2e\\d+)(?::\\d+)?(?:/(?:(?:[!\\x24\'-\\x2e0-9_a-z]|%[0-9a-f][0-9a-f]|[&:;=@])?)*(?:(?:/(?:(?:[!\\x24\'-\\x2e0-9_a-z]|%[0-9a-f][0-9a-f]|[&:;=@])?)*)?)*(?:\\x3f(?:(?:[!\\x24\'-\\x2e0-9_a-z]|%[0-9a-f][0-9a-f]|[&:;=@])?)*)?)?#i', $_SERVER["HTTP_REFERER"], $l_Results)) {
    $result = $l_Results[1];
} else {
    $result = "";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...