我一直在尝试将正则表达式从 ruby 转换为 PHP,但是我运气不佳。
这是红宝石正则表达式:
QUOTED_LITERAL = /"[^"\\]*(?:\\.[^"\\]*)*"/
UNQUOTED_LITERAL = /[^\s=,][^\s=,\\]*(?:\\.[^\s=,\\]*|=[^,>])*/
LITERAL = /(#{QUOTED_LITERAL}|#{UNQUOTED_LITERAL})/
PAIR = /#{LITERAL}\s*=>\s*#{LITERAL}/
这是我在 PHP 中的尝试:
const PAIR = '/("[^"\\]*(?:\\.[^"\\]*)*"|[^\s=,][^\s=,\\]*(?:\\.[^\s=,\\]*|=[^,>])*)\s*=>\s*("[^"\\]*(?:\\.[^"\\]*)*"|[^\s=,][^\s=,\\]*(?:\\.[^\s=,\\]*|=[^,>])*)/';
但是,当我跑步时
$result = preg_match_all(self::PAIR, $input, $matches);
我得到错误:
preg_match_all(): Compilation failed: unmatched parentheses at offset 62
但是,当运行它时,http ://www.phpliveregex.com/带有测试数据:
"foo" => "bar", "foo" => bar, foo => "bar"
它似乎工作正常。
不知道发生了什么。