【发布时间】:2016-11-04 15:15:01
【问题描述】:
我想用 PHP 中的可选参数匹配 LaTeX 函数之类的东西。
以下示例应与模式匹配:
example{arg0}
example{arg0}{opt1}
example{arg0}{opt1}{opt2}
example{arg0}{opt1}{opt2}{opt3}
如您所见,第一个参数是必需的,但后面的参数 (opt1-3) 是可选的。
我得到了这个:
/example\{(.*)\}(\{(.*)\})?(\{(.*)\})?(\{(.*)\})?/U
但它只匹配第一个参数(请参阅regex101)。
什么 RegEx 会将每一行识别为匹配项并将参数 opt1-3 识别为组?
【问题讨论】:
-
当你使用 U-flag 时,你所有的可选组都是惰性的,因此如果不需要就不要匹配。您可以使用
(..)??或不使用 U 让它们再次变得懒惰。您还可以考虑使用否定字符类而不是懒惰的.*,例如[^}\n\r]* -
不使用修饰符
U不起作用(之前尝试过)。但是将所有问号加倍就可以了!非常感谢:)如果你把它作为答案,我会选择并投票。 -
我高兴得太早了。看起来它在 PCRE 中工作,但不是在 PHP 中工作:/
-
看起来它在 PCRE 中有效,但在 PHP 中无效 - 你肯定没有正确使用正则表达式。请分享您正在使用的代码。
-
@WiktorStribiżew 你说得对,我在同时更改两行代码时犯了一些错误-.-