【问题标题】:Regular Expression: brackets inside Square brackets正则表达式:方括号内的括号
【发布时间】:2015-02-11 19:41:51
【问题描述】:

我想匹配以下字符串:

[-ed, -ing, -ment <i>n.</i>]

但排除:

[-ed, -ing, -ment <b>n.</b>]

我的正则表达式是:

   \[[\-,\s\.(<i>)(</i>)a-z]+\]

这行不通。

我将括号添加到&lt;i&gt;,使其作为一个整体显示,因此&lt;b&gt; 不会匹配。

但是,方括号内的括号似乎不起作用。

【问题讨论】:

  • 您认为正则表达式如何工作?转义方括号意味着它们将匹配文字方括号,那么\-,(&lt;i&gt;)(&lt;/i&gt;)a-z 应该如何匹配-ed, -ing, -ment &lt;i&gt;n.&lt;/i&gt;?!
  • 我注意到你提到的问题并纠正了它。但是\[[\-,(&lt;i&gt;)(&lt;/i&gt;)a-z]+\] 也不起作用。
  • (经过编辑。)现在您只是误解了字符类 ([...])。 [\-,(&lt;i&gt;)(&lt;/i&gt;)a-z] 等价于 [&lt;&gt;,\/()aiz-]。我可以建议您阅读正则表达式教程吗?
  • 你确定吗? a-z 表示从 a 到 z 的任何字母,即 a, b, c, d...z
  • 糟糕,我的错。应该是[&lt;&gt;,\/()a-z-]。它匹配&lt;b&gt;,因为&lt;b&gt; 都在里面。 '我在&lt;i&gt; 中添加了括号,所以它看起来是一个整体',这就是你错的地方;您只是将&lt;&gt;/()i 添加到班级,其中大部分是两次。

标签: regex


【解决方案1】:

以下内容适用于示例字符串:

\[([^<>]|<i>.*?<\/i>)+?\]

即方括号包含许多既不是&lt; 也不是&gt; 的单个字符,或带有一些内容的&lt;i&gt;[...]&lt;/i&gt;

它将匹配第一个字符串而不是第二个。然而,问题描述相当模糊,因此正则表达式可能需要一些调整。例如:

  • 只是&lt;i&gt;还是除了&lt;b&gt;之外的任何东西?

  • 方括号可以包含嵌套的方括号吗?

  • 方括号的内容实际上是逗号分隔的元素吗?都必须以连字符开头?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多