【问题标题】:Regex match (replace) all occurrences of double quotes in words between span tags正则表达式匹配(替换)跨度标签之间单词中所有出现的双引号
【发布时间】:2021-12-16 20:04:35
【问题描述】:

我正在尝试替换两个跨度标签之间所有出现的 "。

我用:

(?<=<span>[a-zA-Z0-9_æøåÆØÅ_,.;:!#€%&\/()$§'])*(\")(?=[a-zA-Z0-9_æøåÆØÅ_,.;:!#€%&\/()$§']*<\/span>)

寻找字母+特殊字符

找到“

字母+特殊字符的前瞻

但是使用 html 字符串

<span>d"s"s"</span>

它只匹配最后一次出现的“

如何匹配(最终替换)标签中所有出现的双引号?

提前致谢。

【问题讨论】:

  • 必须是正则表达式吗?
  • 我更喜欢它,因为我已经抓取/匹配了所有跨度标签及其内容,然后再查看每个标签,检查“

标签: regex html-parsing


【解决方案1】:

不要打扰后面的样子。相反,匹配",其中&lt;/span&gt; 紧随其后,但没有找到早于&lt;/span&gt; 的&lt;span&gt;,即" 在一个跨度打开/关闭对:

"(?=((?!<span>).)*<\/span>)

见live demo。

分解正则表达式:

  • " 文字引用
  • (?!&lt;span&gt;). 除&lt; 的&lt;span&gt; 之外的任何字符
  • ((?!&lt;span&gt;).)* 最多但不包括 &lt; 的 &lt;span&gt; 的任何字符
  • (?=((?!&lt;span&gt;).)*&lt;\/span&gt;) 后跟在 &lt;span&gt; 之前遇到 &lt;/span&gt; 的输入

【讨论】:

  • Ecellent,它运行良好,但在以下情况下也有第二个捕获组:"Mads"lkdjff 它也选择一些“正常”字母 -但这已经足够了:-)
  • @Pedellen 正则表达式仅使用单引号字符。正则表达式中的其他所有内容都是向前看(其中包含负面的向前看),并且环顾四周不会消耗或捕获。此正则表达式未捕获任何组。
【解决方案2】:

使用

/(?<=<span>[^<>]*)"(?=[^<>]*<\/span>)/g

见regex proof。

解释

--------------------------------------------------------------------------------
  (?<=                     look behind to see if there is:
--------------------------------------------------------------------------------
    <span>                   '<span>'
--------------------------------------------------------------------------------
    [^<>]*                   any character except: '<', '>' (0 or
                             more times (matching the most amount
                             possible))
--------------------------------------------------------------------------------
  )                        end of look-behind
--------------------------------------------------------------------------------
  "                        '"'
--------------------------------------------------------------------------------
  (?=                      look ahead to see if there is:
--------------------------------------------------------------------------------
    [^<>]*                   any character except: '<', '>' (0 or
                             more times (matching the most amount
                             possible))
--------------------------------------------------------------------------------
    <                        '<'
--------------------------------------------------------------------------------
    \/                       '/'
--------------------------------------------------------------------------------
    span>                    'span>'
--------------------------------------------------------------------------------
  )                        end of look-ahead

【讨论】:

  • 嗯,好像没用?不捕获任何 " 字符?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-26
  • 2018-09-29
  • 2020-10-18
  • 2014-12-23
相关资源
最近更新 更多