Regex 正则表达式:匹配a<;tr>;包含字符串的
我试图匹配包含单词“Source”的所有Regex 正则表达式:匹配a<;tr>;包含字符串的,regex,Regex,我试图匹配包含单词“Source”的所有元素,但其他属性(colspan/width/height、contained及其属性等)未知时。(我知道这可以通过javascript/jQuery选择器完成,但我只是在处理非javascript上下文的HTML。) 目标的示例: <tr> <td>Don't affect this</td> </tr> <tr> <td colspan="3" width="288" height="5
元素,但其他属性(colspan/width/height、contained
及其属性等)未知时。(我知道这可以通过javascript/jQuery选择器完成,但我只是在处理非javascript上下文的HTML。)
目标的示例:
<tr>
<td>Don't affect this</td>
</tr>
<tr>
<td colspan="3" width="288" height="57"><strong>Sources:</strong> Author</td>
</tr>
不要影响这个
来源:作者
(这就是我要将其更改为的内容:)
不要影响这个
来源:作者
以下是我尝试过但不起作用的正则表达式模式:
/<tr>((?:.*?)Source(?:s?):(?:.*?))<\/tr>/gmi,
/((?:.*)源(?:s?)(?:.*)/gmi,
没有火柴
/<tr>((?:[\s\S]*?)Source(?:s?):(?:[\s\S]*?))<\/tr>/gmi,
/((?:[\s]*?)源(?:s?)(?:[\s]*?)/gmi,
匹配第一个tr,但不匹配第二个tr
我想这里有一个正则表达式原理我可能没有掌握,关于贪婪或其他相关的东西。有什么建议吗?如果您使用像jQuery这样的库,您甚至不需要使用正则表达式:
$('tr:contains("Source")').something...
如果您使用的是像jQuery这样的库,您甚至不需要使用正则表达式:
$('tr:contains("Source")').something...
- 开场白:
-开场白]*>
标签 - 正常:
)-除了另一个开头(?:(?!
或结尾
之外的任何标记。通过使用完整的标记,我们可以避免属性名称或值中“源”一词出现误报 - 结束:
-它在这里可能遇到的唯一其他东西是
或
标记,这表示我们的匹配失败。在其中一个标记之前查找“source”是我们如何知道我们找到了匹配项。(正则表达式的其余部分,
,仅消耗标记的剩余部分,因此您可以通过[\s\s]*?
检索它)组[0]
不一定是无效的;它可能是嵌套的TR元素的开头,可能在嵌套的表元素中。如果TR包含单词“source”,正则表达式将在单独的匹配尝试中匹配它。它将只匹配最里面的完整TR标记和其中的单词“source”
和往常一样,当在HTML上使用正则表达式时,我会做一些简化的假设,包括格式良好、SGML注释、CDATA节等。请注意
- 开场白:
-开场白]*>
标签 - 正常:
)-除了另一个开头(?:(?!
或结尾
之外的任何标记。通过使用完整的标记,我们可以避免属性名称或值中“源”一词出现误报 - 结束:
-它在这里可能遇到的唯一其他东西是
或
标记,这表示我们的匹配失败。在其中一个标记之前查找“source”是我们如何知道我们找到了匹配项。(正则表达式的其余部分,
,仅消耗标记的剩余部分,因此您可以通过[\s\s]*?
检索它)组[0]
不一定是无效的;它可能是嵌套的TR元素的开头,可能在嵌套的表元素中。如果TR包含单词“source”,正则表达式将在单独的匹配尝试中匹配它。它将只匹配最里面的完整TR标记和其中的单词“source”
和往常一样,在HTML上使用正则表达式时,我会做一些简化的假设,包括格式良好、SGML注释、CDATA节等。请注意清空。“属性…未知”-然后允许属性:
/[\s\s]*?来源:[\s\s]*?/gmi
。请注意,用正则表达式解析HTML是一个坏主意。我发布这篇文章是为了说明更正,但这不应被视为答案。“属性…未知”-然后允许属性:/[\s\s]*?来源:[\s\s]*?/gmi
。请注意,用正则表达式解析HTML是一个坏主意。我发布这篇文章是为了显示更正,但这不应被视为答案。对,这会起作用,但我正在处理文本以在非javascript上下文中使用。@supertrue oy…请说出上下文是什么。您在哪里使用它。什么语言,等等…对吗,这会起作用,但我正在处理文本,以便在非javascript上下文中使用。@supertrue oy…请说出上下文是什么。您在哪里使用它。什么语言,等等。。。
/<tr[^>]*>(?:(?!<|source)[\s\S])*(?:<(?!\/?tr)[^>]*>(?:(?!<|source)[\s\S])*)*source[\s\S]*?<\/tr>/i
opening normal ( special normal * ) * closing