Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java regexp有什么问题?_Java_Regex - Fatal编程技术网

Java regexp有什么问题?

Java regexp有什么问题?,java,regex,Java,Regex,我不明白,为什么这个regexp不能像我期望的那样工作: Regexp:^(.*?)(.*?)$ 测试:一些字符一些字符 测试结果: 第1组:空 第2组:空 第3组:一些字符一些字符 我希望组2=您不能在可选捕获组之前使用非贪婪通配符。改用这个: ^<prefix>([^<]*)(<optTag.*?>)?(.*?)<postfix>$ ^([^您可以在正则表达式中添加单词边界“\b”,以获得组2中所需的值 这个正则表达式为我工作 ^<prefi

我不明白,为什么这个regexp不能像我期望的那样工作:

Regexp:
^(.*?)(.*?)$

测试:
一些字符一些字符

测试结果:

第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组将根据输入消耗所有内容。我认为除非输入空间非常有限,否则您无法使用正则表达式捕获所有可能的情况。例如,如果第一组可以包含前缀