gpt4 book ai didi

php - 将正则表达式从 ruby​​ 转换为 PHP

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:41:35 26 4
gpt4 key购买 nike

我一直在尝试将正则表达式从 ruby​​ 转换为 PHP,但是我运气不佳。

这是 ruby​​ 正则表达式:

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():编译失败:偏移量 62 处的括号不匹配


然而,当运行它时,http://www.phpliveregex.com/与测试数据:

"foo" => "bar", "foo" => bar, foo => "bar"

它似乎工作正常。

不确定发生了什么。

最佳答案

问题出在你的反斜杠上。

我设法在删除所有反斜杠后编译它。

然后,我用其中的 4 个替换了所有双斜杠,并且 preg_match_all() 也能够编译正则表达式。

const PAIR = '/("[^"\\\\]*(?:\\\\.[^"\\\\]*)*"|[^\s=,][^\s=,\\\\]*(?:\\\\.[^\s=,\\\\]*|=[^,>])*)\s*=>\s*("[^"\\\\]*(?:\\\\.[^"\\\\]*)*"|[^\s=,][^\s=,\\\\]*(?:\\\\.[^\s=,\\\\]*|=[^,>])*)/';

您可能需要对其进行编辑以获得您想要的确切正则表达式。您遇到编译错误是因为 \\ 被作为 \ 提供给正则表达式引擎,它避开了直接的方括号。要对文字反斜杠进行编码,您需要使用 \\\\ - 一次用于字符串,一次用于正则表达式引擎。

string '\\\\'  --becomes--> regex \\ --becomes--> literal \

Ruby 没有这个问题,因为它的正则表达式语法与其字符串语法是分开的。

(相关问题:preg_match(): Compilation failed: unmatched parentheses .)

关于php - 将正则表达式从 ruby​​ 转换为 PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18326161/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com