gpt4 book ai didi

javascript - 当正则表达式有转义时,在 php 中重写 javascript 正则表达式

转载 作者:行者123 更新时间:2023-12-01 01:00:50 24 4
gpt4 key购买 nike

我正在尝试将我的正则表达式写为字符串(它是我的 S-Expression 分词器的一部分,首先在字符串、正则表达式和 lisp 注释上进行分割,然后对它们之间的内容进行分词),它适用于 https://regex101.com/r/nH4kN6/1/但将其写为 php 的字符串时遇到问题。

我的 JavaScript 正则表达式如下所示:

var pre_parse_re = /("(?:\\[\S\s]|[^"])*"|\/(?! )[^\/\\]*(?:\\[\S\s][^\/\\]*)*\/[gimy]*(?=\s|\(|\)|$)|;.*)/g;

我尝试在 php 中编写此正则表达式(Regex101 中的正则表达式位于单引号内)。

$pre_parse_re = "%(\"(?:\\[\\S\\s]|[^\"])*\"|/(?! )[^/\\]*(?:\\[\\S\\s][^/\\]*)*/[gimy]*(?=\\s|\\(|\\)|$)|;.*)%";

我的输入

'(";()" /;;;/g baz); (baz quux)'

调用时:

$parts = preg_split($pre_parse_re, $str, -1,
PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);

它应该创建与 Regex101 中相同的数组(3 个匹配项和之间的内容),但它会在正则表达式内的第一个分号处继续拆分 /;;;/g

最佳答案

我认为你的转义可能是不正确的。试试这个正则表达式:

$pre_parse_re = "%(\"(?:\\\\[\\\\S\\\\s]|[^\"])*\"|\/(?! )[^\/\\\\]*(?:\\\\[\S\s][^\/\\\\]*)*\/[gimy]*(?=\s|\(|\)|$)|;.*)%";

使用 preg_split 也可能返回比您想要的更多的捕获组,因此如果您只需要 3 个匹配项,您也可以更改为使用此选项。

$parts;
preg_match_all($pre_parse_re, $str, $parts, PREG_SET_ORDER, 0);

关于javascript - 当正则表达式有转义时,在 php 中重写 javascript 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56091063/

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