【发布时间】:2020-08-22 11:26:40
【问题描述】:
tl;博士:
我正在寻找一种方法来匹配基于 PHP 中的开始序列语法风格的结束字符序列与 PCRE 风格的正则表达式。
任务
我正在编写一个模块来从编写的 PHP 代码中捕获所有可翻译的字符串。该模块的一项职责是捕获代码中声明的任何翻译上下文。此上下文作为选项数组的一部分提供。
在 PHP(从 5.4 版开始)中,有两种不同的样式可以定义数组:
一)array(...)
b) [...]
我现在想编写一个能够识别这两种样式的正则表达式。该模式应该能够正确匹配结束字符序列,具体取决于所选的开始数组的样式。
很遗憾,我找不到任何有关如何将 IF 语句应用于给定捕获组的文档。
理论上它应该看起来像这样:/ ... (array\(|\[) ... (?(?=\1==\[)\]|\)) ... /
(注意:上面一行中的“...”应该表示正则表达式模式比这里说明的要长。这应该仅作为我要实现的目标的示例)
(?(?=\1==\[)\]|\))part 翻译成“普通语言”:如果第一个捕获组的内容是一个左方括号,那么该模式应该捕获一个右方括号,否则需要一个右方括号。
有可能实现这样的目标吗?非常感谢任何帮助!
提前致谢
克里斯
【问题讨论】:
-
也许匹配
array\([^()]*\)|\[[^][]*]中的任何一种格式是一种更简单的方法,尽管[]格式是一个非常广泛的匹配。 regex101.com/r/9uPIiZ/1 -
谢谢,但是这样我将无法在相同的引用中捕获数组内容
-
您可以使用带有分支重置组的模式来引用具有相同引用的捕获内容。
标签: regex pcre regex-lookarounds regex-group