正则表达式:删除所有后跟逗号的数字

RegEx: Delete all numbers followed by a comma

我的数据库中有 HTML link 需要修改。 示例 link 如下所示:

<a href="http://example.com/category/subcategory/1,23,456.html">My Link </a>

并想将其更改为:

<a href="http://example.com/category/subcategory/456.html">My Link </a>

我已经尝试过:/(href=".*)\d+.*,/U 但最终只删除了 link 中的 1,。 我最大的问题是告诉表达式 "look for any occurrence of a number followed by a comma, but not a period".

谁能帮我找到一个删除所有数字后跟逗号的正则表达式? 请记住,这些 link 位于一个非常大的 HTML 代码块中。所以正则表达式必须只匹配这些 links.

以下正则表达式

(?:(?:^|(?<!\)").*?href=")(*SKIP)(?!)|\d+,
  • (*SKIP)(?!)
    • (?!): 失败
    • (*SKIP):避免回溯
  • .*?href=":匹配第一个 href=" 序列之前的所有
  • (?:^|(?<!\)") : ^ 行锚点的开头或 " 前面没有 \

请注意,如果 href 可以出现在标签之外,则可能不安全。

test with regex101

使用相同技术的更安全的解决方案

(?:<![CDATA[.*?]]>|<!--.*?-->|>[^<]*<|href="|"[^">]*(?=>)|(?<!href=)"(?:\.|[^"])*")(*SKIP)(?!)|\d+,