我的正则表达式符合预期

时间:2018-08-07 19:39:38

标签: java regex string regex-greedy non-greedy

我知道使用正则表达式来解析html的做法不被接受,但这是我要首先尝试的解决方案。

我正在尝试匹配

what a great sentence this is

以及这些单词之间的任何字符或空格

在以下字符串中:

<p>
  what is going on with you?
</p>
<p>
  what a great
</p>
<p>
  sentence this is
</p>
<p>
  How is your family?
</p>

我使用的正则表达式是:

what.*a.*great.*sentence.*this.*?is

我知道。*吗?在'is'阻止我的正则表达式匹配最后一个p标签中的'How is'之前。但是我不知道该从第一个p标签的“发生什么”开始阻止比赛开始

我正在查看https://regex101.com/r/kZWYR7/1的输出,以确认其未按预期工作。

请帮忙,我觉得我在正则表达式中缺少一个重要的教训,这使我无法弄清这一点。

预期匹配为:

what a great
    </p>
    <p>
      sentence this is

编辑:澄清我的问题及其与重复项有何不同

1 个答案:

答案 0 :(得分:0)

要将纯文本与正则表达式中字符串的一部分匹配,只需使用您要查找的文本。匹配what a great sentence this is应该有效,不需要.*。之后的.*允许字符串的其余部分为is之前的任何内容。

编辑:我刚读完您的评论,发现单词之间存在空格的可能性。在这种情况下,@WiktorStribiżew是正确的,在每个单词之间使用\W*来容纳单词之间任意数量的非单词字符。 (再次感谢@WiktorStribiżew)

正如@Jonathan Buelow指出的那样,如果它只是单词之间的空白,则可以使用\s+\s*代替: what\s+a\s+great\s+sentence\s+this\s+is