PCRE正则表达式:正向预查或管道符后反向引用失效问题
正则表达式反向引用匹配问题
我的正则表达式如下:
(?'a'[~_])(?=(?!\s)(?:(?!\k'a').)+(?<!\s)\k'a')|(?=(?=(?'b'[\s\S]*))(?'c'\k'a'(?!\s)(?:(?!\k'a').)+(?<!\s)(?=\k'b'\z)|(?<=(?=x^|(?&c))[\s\S])))\k'a'
问题描述
管道符左侧的片段(?'a'[~_])(?=(?!\s)(?:(?!\k'a').)+(?<!\s)\k'a')中,对命名捕获组(?'a'[~_])的反向引用\k'a'可以正常工作;但管道符右侧的片段(?=(?=(?'b'[\s\S]*))(?'c'\k'a'(?!\s)(?:(?!\k'a').)+(?<!\s)(?=\k'b'\z)|(?<=(?=x^|(?&c))[\s\S])))\k'a'里,同样的反向引用\k'a'无法匹配。
正则用途
该正则用于仅匹配~test~或_test_这类字符串的前后分隔符,附带额外规则:先通过正向预查匹配起始分隔符,再利用可变长度后向预查匹配结束分隔符。
限制条件
我清楚可以用\K或捕获组大幅简化查询,但这两种方式都不可行。
内容的提问来源于stack exchange,提问作者OunceOfShag
相关产品推荐
相关产品推荐

