gpt4 book ai didi

php - 正则表达式:向后看以避免出现奇数个连续反斜杠

转载 作者:可可西里 更新时间:2023-10-31 22:47:08 24 4
gpt4 key购买 nike

我有用户输入,其中允许在方括号内使用某些标签。我已经编写了正则表达式模式来查找和验证括号内的内容。

在用户输入字段中,左括号 ([) 可以用反斜杠转义,反斜杠也可以用另一个反斜杠 (\) 转义。我需要后视子模式以避免在左括号之前出现奇数个连续反斜杠。

目前我必须处理这样的事情:

(?<!\\)(?:\\\\)*\[(?<inside brackets>.*?)]

它工作正常,但问题是这段代码仍然匹配括号前面可能的成对连续反斜杠(即使它们是隐藏的)并且向后看只是检查是否有另一个反斜杠附加到对(或直接附加到开头) -括号)。如果可能的话,我需要避免将它们全部放在后视组中。

示例:

my [test] string is ok
my \[test] string is wrong
my \\[test] string is ok
my \\\[test] string is wrong
my \\\\[test] string is ok
my \\\\\[test] string is wrong
...
etc

我使用 PHP PCRE

最佳答案

上次我检查时,PHP 不支持可变长度后视。这就是为什么你不能使用简单的解决方案 (?<![^\\](?:\\\\)*\\) .

最简单的解决方法是简单地匹配整个内容,而不仅仅是括号部分:

(?<!\\)((?:\\\\)*)\[(?<inside_brackets>.*?)]

不同的是,现在,如果您在 preg_replace 中使用该正则表达式,您必须记住在替换字符串前加上 $1 前缀, 以恢复那里的反斜杠。

关于php - 正则表达式:向后看以避免出现奇数个连续反斜杠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9613522/

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