RegExp:If子句是否可以捕获组? tl;博士:
我正在寻找一种方法,根据PHP中开头序列语法的样式,将结尾字符序列与PCRE样式的正则表达式相匹配 任务 我正在编写一个模块,从编写的PHP代码中捕获所有可翻译字符串。本模块的一项职责是捕获代码中规定的任何翻译上下文。此上下文作为选项数组的一部分提供 在PHP(afair从5.4版开始)中,有两种不同的样式可以定义数组:RegExp:If子句是否可以捕获组? tl;博士:,regex,pcre,regex-lookarounds,regex-group,Regex,Pcre,Regex Lookarounds,Regex Group,我正在寻找一种方法,根据PHP中开头序列语法的样式,将结尾字符序列与PCRE样式的正则表达式相匹配 任务 我正在编写一个模块,从编写的PHP代码中捕获所有可翻译字符串。本模块的一项职责是捕获代码中规定的任何翻译上下文。此上下文作为选项数组的一部分提供 在PHP(afair从5.4版开始)中,有两种不同的样式可以定义数组: a) 数组(…) b) […] 现在我想编写一个能够识别这两种样式的正则表达式。模式应该能够正确匹配结束字符序列,这取决于为开始数组选择的样式 不幸的是,我找不到任何关于如何将
a)
数组(…)
b)
[…]
现在我想编写一个能够识别这两种样式的正则表达式。模式应该能够正确匹配结束字符序列,这取决于为开始数组选择的样式
不幸的是,我找不到任何关于如何将IF语句应用于给定捕获组的文档
理论上应该是这样的:/。。。(数组\(\[)…(?(?=\1==\[)\]\)…/
(注意:上面一行中的“…”应该表示regex模式比这里所述的要长。这应该只是我试图实现的一个示例)
(?(?=\1==\[)\]\\)
部分翻译为“正常语言”:如果第一个捕获组的内容是一个开口方括号,则图案应捕获一个闭合方括号,否则需要一个闭合圆括号
有可能实现这样的目标吗?非常感谢您的帮助
提前感谢克里斯正则表达式的答案是
(?:array(\()|\[).*?(?(1)\)|])
见
详细信息
-在将(?:数组(\()\\[)
捕获到组1中时与(
匹配,或数组(
字符)匹配的非捕获组[
-除换行符以外的任何0个或更多字符,尽可能少*?
-条件构造:如果组1匹配(组内存缓冲区中有(?(1)\)|]
字符),则(
必须在当前位置匹配,否则)
]
(?|
参考组1获取值
要获取左括号和右括号或方括号之间的值,可以使用[^
匹配除字符类中列出的字符以外的任何字符
(?|array(\([^()]*\))|(\[[^][]*]))
解释
分支重置组(?|
按字面匹配数组
捕获组1(
匹配\([^()]*\)
(…)
关闭第1组)
或|
捕获组2(
匹配\[^][]*]
[…]
关闭第2组)
关闭分支重置组)
也许匹配任何一种格式的
array\([^()]*\)\124;\[^][]*]
会更容易些,尽管[]
格式是一个非常广泛的匹配项。谢谢,但是这样我就无法在相同的引用中捕获数组内容。您可以使用带有分支的模式重置组来引用具有相同引用的捕获内容。哇。太棒了!正是我搜索的内容,非常感谢!