Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.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 在一行中匹配多个模式_Java_Regex - Fatal编程技术网

Java 在一行中匹配多个模式

Java 在一行中匹配多个模式,java,regex,Java,Regex,有人能告诉我为什么我的模式:(.[^]*)?不能正常工作。示例匹配: 这是一个测试,任何东西都可以放在这里,即使是其他标签 这是一项测试 如果以上都在一条线上,它应该会找到3种不同的模式。下面的链接展示了它的真实行为,这是非常奇怪的 当它找到时,它找到的匹配项应始终立即开始尝试以下操作: <p.*?>.*?</p> * 请阅读本页上关于贪婪和不情愿的内容:“。问题出在(.[^]*)?,意思是: 一个字符 后跟任意字符n次,但不是 我猜你想说的不是n次字符串,但

有人能告诉我为什么我的模式:
(.[^

]*)?

不能正常工作。示例匹配:

  • 这是一个测试,任何东西都可以放在这里,即使是其他标签

  • 这是一项测试

  • 如果以上都在一条线上,它应该会找到3种不同的模式。下面的链接展示了它的真实行为,这是非常奇怪的

    当它找到
    时,它找到的匹配项应始终立即开始尝试以下操作:

    <p.*?>.*?</p>
    
    *

    请阅读本页上关于贪婪和不情愿的内容:“。

    问题出在
    (.[^

    ]*)?
    ,意思是:

    • 一个字符
    • 后跟任意字符n次,但不是
    我猜你想说的不是n次

    字符串,但这不是实现它的方法

    尝试使用
    *?
    代替:
    *?

    *
    表示匹配最长的字符串,
    *?
    表示匹配最短的字符串


    例如,对于字符串
    #foo#bar#
    *
    将匹配
    #foo#bar#
    ,而
    *?
    将匹配
    #foo#

    您的正则表达式有几个问题。让我们看看它们是什么样子

    这是您的正则表达式:-

    <p(\s+(.*)?)?>(.[^</p>]*)?</p>
    
    或者,您甚至可以将正则表达式简化为:-

    <p[^>]*>((?!</p>).)*</p>
    
    ]*>((?!

    ))*

    您想要这个吗-
    <p[^>]*>((?!</p>).)*</p>