【问题标题】:How to capture search characters without its surrounding search condition characters?如何在没有周围搜索条件字符的情况下捕获搜索字符?
【发布时间】:2026-02-05 00:15:01
【问题描述】:

我有一个如下所示的字符串:

Hello Hello Hello<br>Hello Hello <br> hello hello

我正在尝试使用正则表达式捕获那些被字符包围的&lt;br&gt;。所以从上面的示例字符串中,我应该只捕获第一个 &lt;br&gt; 实例,而不是第二个。我试过用这个:

\w(<br/>)\w

但我正在捕捉结尾:o&lt;br&gt;H

如何让正则表达式仅捕获 &lt;br&gt; 而不是环绕字符?

【问题讨论】:

  • "Please also include a tag specifying the programming language or tool you are using."(来自[regex]标签描述)
  • 如果你只想要&lt;br&gt;,那为什么要捕获它呢?为什么不简单地认为它是&lt;br&gt;
  • 您是否将“匹配数据”(包括周围的\w 字符)与“捕获组”(括号内的表达式匹配的部分)混淆了?
  • 很抱歉给您带来了困惑。我已经更新了我的问题,以解释我为什么要这样做。
  • 问题是,您真正想要实现什么?如果你去掉周围的字符,你就没有机会将这个&lt;br&gt; 与其他人区分开来。见:meta.stackexchange.com/questions/66377/what-is-the-xy-problem

标签: regex sublimetext2


【解决方案1】:

您可以使用环视:

(?<=\w)<br>(?=\w)

(我不确定/ 在您的正则表达式中做了什么)

尽管大多数语言都允许您提取放在括号中的内容,但在这种情况下,您可以保留正则表达式并只提取第一组(对应于括号中的第一个(也是唯一一个)内容)。

解释,由this site提供:

NODE                     EXPLANATION
--------------------------------------------------------------------------------
  (?<=                     look behind to see if there is:
--------------------------------------------------------------------------------
    \w                       word characters (a-z, A-Z, 0-9, _)
--------------------------------------------------------------------------------
  )                        end of look-behind
--------------------------------------------------------------------------------
  <br>                     '<br>'
--------------------------------------------------------------------------------
  (?=                      look ahead to see if there is:
--------------------------------------------------------------------------------
    \w                       word characters (a-z, A-Z, 0-9, _)
--------------------------------------------------------------------------------
  )                        end of look-ahead

【讨论】: