Reb*_*ia1 3 .net c# regex pattern-matching
换句话说,我会将问题描述为"匹配A或B匹配foo,然后匹配A或B之前不匹配".
我可以使用以下正则表达式:
AfooB|BfooA
Run Code Online (Sandbox Code Playgroud)
我想知道是否有更有效的方法来做到这一点?我知道如何使用"\"组号和组号引用捕获的组.在这种情况下,我想应用类似的说"不是在捕获的组中匹配的选项"(并且仍然仅限于匹配该组的其他可能的匹配).
我正在寻找比简单更有效的东西的原因"AfooB|BfooA"是,在我的情况下,这"foo"是一个非常长的模式,如果可能的话,我宁愿减少重复.
匹配第二个时,您可以使用具有反向引用限制的否定前瞻A或B:
(A|B)foo(?!\1)(A|B)
Run Code Online (Sandbox Code Playgroud)
基本上,(A|B)匹配并将值捕获到组1中,然后foo匹配foo,(?!\1)确保后面的文本与捕获到第一组中的文本不同,然后它只能匹配相反的值(A|B).
注意:如果A和B是单字符,请使用字符类:([AB])foo(?!\1)([AB])
| 归档时间: |
|
| 查看次数: |
72 次 |
| 最近记录: |