我的正则表达式查询如下(演示(:
(?'a'[~_])(?=(?!s)(?:(?!k'a').)+(?<!s)k'a')|(?=(?=(?'b'[sS]*))(?'c'k'a'(?!s)(?:(?!k'a').)+(?<!s)(?=k'b'z)|(?<=(?=x^|(?&c))[sS])))k'a'
我面临的问题是,对命名捕获组(?'a'~_)
的反向引用在主管路右侧的查询部分不匹配:
(?=(?=(?'b'[sS]*))(?'c'k'a'(?!s)(?:(?!k'a').)+(?<!s)(?=k'b'z)|(?<=(?=x^|(?&c))[sS])))k'a'
然而,他们在管道左侧的部分工作:
(?'a'[~_])(?=(?!s)(?:(?!k'a').)+(?<!s)k'a')
查询的目的是使用一些附加条件仅匹配字符串(如~test~
或_test_
(的周围分隔符,方法是首先将开头分隔符与先行符匹配(demo(,然后使用可变长度的先行符匹配结尾分隔符(demo使用文本而非后引用(。
虽然我知道使用K
或捕获组可以极大地简化查询,但两者都不是我的选择
您的正则表达式非常棒。你可以稍微纠正一下。
(?'a'[~_])(?=
(?'d'(?!s)(?:(?!k'a').)+(?<!s)k'a') |
(?=(?'b'.*))(?'c'
^(?>k'a'(?&d)|.)*k'a'(?&d)(?=k'b'z) |
(?<=(?=x^|(?&c)).)
)
)
演示
但我认为这样一个正则表达式的性能会很低。