首页 > 解决方案 > 我的正则表达式在预期之前匹配

问题描述

我知道使用正则表达式解析 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

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

标签: javaregexstringregex-greedynon-greedy

解决方案


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

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

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


推荐阅读