regex - 如何使用正则表达式搜索双引号包围的文本?

标签 regex

我有一个字符串,其中包含一些 HTML 代码,例如:

This is <strong id="c1-id-8">some</strong> <em id="c1-id-9">text</em>

我需要删除 id每个 HTML 标签的属性,但我对正则表达式的经验为零,所以我从互联网上到处搜索,然后写了这个模式:[\s]+id=\".*\"

不幸的是,它没有按照我的预期工作。事实上,我希望正则表达式能够捕获 id="后跟重复任意次数的任意字符,并以最近的双引号终止;实际上,在这个例子中,我期望捕获 id="c1-id-8"id="c1-id-9" 。 但相反,该模式返回了子字符串 id="c1-id-8">some</strong> <em id="c1-id-9" ,它找到第一次出现 id="以及最后一次出现的双引号字符。

您能告诉我我的模式有什么问题以及如何修复它吗? 非常感谢

最佳答案

正则表达式中的量词.*贪婪(意味着它尽可能匹配)。为了满足最低要求,您可以使用类似 /\s+id=\"[^\"]*\"/ 的内容。方括号 [] 表示字符类。因此它将匹配括号内的所有内容。字符类开头的克拉 [^] 是一个否定,意味着它将匹配 一切除了括号中指定的内容

另一种方法是通过将 .* 量词更改为 .*? 来告诉其惰性,它将匹配尽可能少的内容可以。

关于regex - 如何使用正则表达式搜索双引号包围的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7545756/

相关文章:

java - 如何使用正则表达式提供字数限制的描述?

javascript - 正则表达式:仅当另一个单词不存在时才匹配单词

.net - 我将如何修改此正则表达式以提取英国邮政编码的左右部分?

regex - 如何在 awk 语句中对 aready 字段使用模式匹配?

python - 使用正则表达式获取 XML 父标签

regex - 使用 sed,将特定字符串下方的部分行写入两个不同的变量

php - 用 PHP 正则表达式替换单词或单词组合

regex - 如何在 OSX 中 grep 三个句点?

regex - 单击 Cypress 中的完全匹配文本

c# - 拒绝输入重复字符的正则表达式