Regex 正则表达式是否匹配未用括号括起来的下划线?
在以下示例中,是否有人建议使用正则表达式来匹配下划线:Regex 正则表达式是否匹配未用括号括起来的下划线?,regex,Regex,在以下示例中,是否有人建议使用正则表达式来匹配下划线: test_test test[_test test_] 但与此不符: test[_]test 这是使用.Net正则表达式库。我使用这个正则表达式测试仪来检查: 我不知道.Net,但正则表达式将由两部分组成,一部分匹配除括号后加下划线外的任何字符,另一部分则相反: [^\[](_)|(_)[^\]] 编辑:刚刚注意到您需要添加下划线位于开头或结尾的情况: [^\[](_)|(_)[^\]]|^_|_$ 试一试 编辑:现在处理 test
test_test
test[_test
test_]
但与此不符:
test[_]test
这是使用.Net正则表达式库。我使用这个正则表达式测试仪来检查:
我不知道.Net,但正则表达式将由两部分组成,一部分匹配除括号后加下划线外的任何字符,另一部分则相反:
[^\[](_)|(_)[^\]]
编辑:刚刚注意到您需要添加下划线位于开头或结尾的情况:
[^\[](_)|(_)[^\]]|^_|_$
试一试
编辑:现在处理
test_test
未测试,但读取:任何字符串后跟或[\uu
然后是任何字符,但或任何字符,但[
然后是
注意,对于以下情况,这可能会失败
_]Test
Test[_
我不知道这对你来说是不是个问题
使用所有示例成功测试尝试以下方法:
_[^\]]|[^[]_
它由.[^\]
(下划线和非]
)和[^[].
(非[
和下划线)的交替组成
或者,如果您希望使用环视断言来真正匹配下划线而不是周围的字符:
_(?=[^\]])|_(?<=[^[]_)
编辑:这里有一个更容易阅读的版本:
(?<!\[)_|_(?!\])
(?
我喜欢嵌套环视版本,因为它在实际找到下划线之前不会做任何事情。除非正则表达式引擎足够聪明地将其优化掉,否则这个“(不是x)或(不是y)
”版本将在每个位置进行负向环视。(?|(?!]))
它使用负向前/向后(而不是正向前/向后和排除字符)。不适用于:test[\u test(我在这里使用正则表达式测试仪测试:)hi Moskie..未选中任何选项..此正则表达式匹配“test[\u test”中的下划线stringThis很接近,只是它匹配了一个额外的字符,而不仅仅是下划线。我尝试将其修改为使用前瞻,但它不适用于所有情况。(?=[^])|(?=[^[])使用字符串测试:“test[]test[\u test]test[\u test]test\u test”。找到3个匹配项,应该找到5个。@Moskie:在后一种情况下,您需要查找后面的断言。我认为这样做:(?=[^]])|(?@Moskie:最好使用(?=[^\]])| |用字符串测试:“test[]test[\u test[\u test]test[u test]test\u test”.找到0个结果,应该找到5个。我已经在.NET和Java中对其进行了测试,得到了相同的结果:前五个字符串匹配,最后一个不匹配。如果您使用.NET,您可能会发现另一个测试程序非常有用:www.lastdomainnameonearth.com
_(?:(?=[^\]])|(?<=[^[]_))
_(?!\](?<=\[_\]))
_(?!\](?<=\[..))
_(?<!\[_(?=\]))
test_test
test[_test
test_]
_]Test
Test[_
test[_]test
(?<!\[)_|_(?!\])