具有条件lookbehind和捕获组的.net正则表达式
发布时间:2020-12-13 22:54:26 所属栏目:百科 来源:网络整理
导读:模式:a(?(?!))b(c) 输入:a b c Desription:条件应该与空间匹配,如果lookbehind不是空格. 它匹配正确,但捕获组$1为空(包含c的instad). 这是.net正则表达式的问题还是我错过了什么? 示例: http://regexstorm.net/tester?p=a(%3f(%3f%3C!+)+)b+(c)i=a+b
模式:a(?(?<!))b(c) 输入:a b c Desription:条件应该与空间匹配,如果lookbehind不是空格. 它匹配正确,但捕获组$1为空(包含c的instad). 这是.net正则表达式的问题还是我错过了什么? 示例:
http://regexstorm.net/tester?p=a(%3f(%3f%3C!+)+)b+(c)&i=a+b+c
我不确定是否记录了这种行为(如果是,那么我没有找到它)但使用包含显式零宽度断言的条件构造作为其表达式(?(?= expression)yes | no)覆盖下一个编号的捕获组(清空它).您可以通过在RegEx下运行来确认:
a(?(?<! ) )b (c)() 解决此问题的四种方法: >将表达式括在@DmitryEgorov指出的括号中(也是第二个 a(?((?<! )) )b (c) >由于此行为仅适用于未命名的捕获组 a(?(?<! ) )b (?<first>c) >在(c)和条件之间的任何地方添加额外的捕获组: a(?(?<! ) )(b) (c) >如果可能,避免这样的表达.例如: a(?( ) )b (c) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |