有人可以提供一个正则表达式来匹配以下示例中的下划线吗:
test_test
test[_test
test_]
但不匹配这个:
test[_]test
我正在使用 .Net 正则表达式库。我正在使用这个 RegEx 测试器来检查:
http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx
有人可以提供一个正则表达式来匹配以下示例中的下划线吗:
test_test
test[_test
test_]
test[_]test
我正在使用 .Net 正则表达式库。我正在使用这个 RegEx 测试器来检查:
http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx
试试这个:
_[^\]]|[^[]_
它由_[^\]]
(下划线和不是]
)和[^[]_
(不是[
和下划线)交替组成。
或者,如果您想使用前后查找断言来确实只匹配下划线而不是周围字符:
_(?=[^\]])|_(?<=[^[]_)
这个模式匹配任何一个下划线,但该下划线后面不能是 ]
(使用正向先行断言:(?=[^\]])
)或者该下划线前面不能是 [
(使用负向后行断言:(?<=[^[]_)
)。这两个条件可以组合使用:
_(?:(?=[^\]])|(?<=[^[]_))
_(?=[^\]])|_(?<=_[^[])
。 - Gumbo_(?!\](?<=\[_\]))
_(?!\](?<=\[..))
如果您愿意,可以先进行向后查找:
_(?<!\[_(?=\]))
NOT (x AND y)
”的语义。在EditPad Pro中测试它,会将这些字符串中除最后一个外的所有下划线都匹配:test_test
test[_test
test_]
_]Test
Test[_
test[_]test
编辑:这里有一个更易读的版本:
(?<!\[)_|_(?!\])
我不了解 .Net,但正则表达式应该由两部分组成,一部分匹配除括号和下划线以外的任何字符,另一部分则相反:
[^\[](_)|(_)[^\]]
编辑:刚注意到您需要添加下划线在开头或结尾的情况:
[^\[](_)|(_)[^\]]|^_|_$
((?|(?!]))
这段代码使用了负向预测/回顾(而不是正向预测/回顾和排除字符)。
尝试
^.*(\[_[^\]])|([^\[]_\])|([^\[]_[^\]]).*$
编辑:现在处理
test_test
未经测试,但是可以理解为:任何字符串后面跟着要么[_
再加上任意一个非]字符或者任意一个非[
字符再加上_]
请注意,这种情况可能会失败:
_]Test
Test[_
我不知道这对你是否是个问题?
已经成功测试了你提供的所有例子。