Java regexp有什么问题?
我不明白,为什么这个regexp不能像我期望的那样工作: Regexp:Java regexp有什么问题?,java,regex,Java,Regex,我不明白,为什么这个regexp不能像我期望的那样工作: Regexp:^(.*?)(.*?)$ 测试:一些字符一些字符 测试结果: 第1组:空 第2组:空 第3组:一些字符一些字符 我希望组2=您不能在可选捕获组之前使用非贪婪通配符。改用这个: ^<prefix>([^<]*)(<optTag.*?>)?(.*?)<postfix>$ ^([^您可以在正则表达式中添加单词边界“\b”,以获得组2中所需的值 这个正则表达式为我工作 ^<prefi
^(.*?)(.*?)$
测试:一些字符一些字符
测试结果:
第1组:空
第2组:空
第3组:一些字符一些字符
我希望组2=
您不能在可选捕获组之前使用非贪婪通配符。改用这个:
^<prefix>([^<]*)(<optTag.*?>)?(.*?)<postfix>$
^([^您可以在正则表达式中添加单词边界“\b”,以获得组2中所需的值
这个正则表达式为我工作
^<prefix>(.*?)(\b<optTag.*>\b)(.*?)<postfix>$
^(.*)(\b\b)(.*)$
您可以阅读更多。有点痛苦,但您可以在那些(.*)
组中放置块断言
^((?:(?!)*?)()((?:(?!)*?)$
扩大
^
<prefix>
( # (1 start)
(?:
(?! <optTag .*? > )
.
)*?
) # (1 end)
( <optTag .*? > )? # (2)
( # (3 start)
(?:
(?! <optTag .*? > )
.
)*?
) # (3 end)
<postfix>
$
^
(#(1开始)
(?:
(?! )
.
)*?
)#(一完)
( )? # (2)
(#(3开始)
(?:
(?! )
.
)*?
)#(三完)
$
如果第一组包含,这将失败。如果从测试字符串中删除
,这将不起作用。是的,当然不会。op没有提到任何关于改变整个“”部分的“optTag”部分的内容。可能他只是在寻找变化的“值”。op的原始正则表达式有()?
清楚地表明整个
部分是可选的。由于第2组和第3组是可选的,第1组或第3组将根据输入消耗所有内容。我认为除非输入空间非常有限,否则您无法使用正则表达式捕获所有可能的情况。例如,如果第一组可以包含前缀