组合2个表达式(如维恩图)的正则表达式语法是什么?
我有2个表格单元格的HTML。 2个单元格中的每一个都包含多个表格行:
https://regex101.com/r/cTXwrT/3
此表达式仅捕获第二个表格单元格:
(?<=your mother)(?s).*(?=Monochrome)
此表达式匹配所有表格单元格中的表格行:
[A-Za-z].*Yoghurt
如何将两个表达式合并为一个表达式,以便仅从第二个表格单元格中获取表格行?
我在使用PCRE作为正则表达式引擎的AutoHotkey中写作。
我为糟糕的术语道歉 - 我已经阅读过递归,反向引用,捕获组,原子组等,但它们似乎并没有适用。
答案 0 :(得分:1)
我认为您可以使用嵌套捕获组执行所需操作。在这里,我捕获内部捕获组中td
标记之间的所有内容:
(?<=your mother)(?s).*((?<=\<td bgcolor="#F0F0F0"\>).*(?=\<\/td\>)).*(?=Monochrome)
您可能需要稍微调整一下,它是一个非常糟糕的正则表达式,但它适用于您当前的用例。
阅读AutoHotkey#RegExMatch的文档:
FoundPos := RegExMatch(Haystack, NeedleRegEx [, UnquotedOutputVar = "", StartingPosition = 1])
如果NeedleRegEx中存在任何捕获子模式,则它们的匹配存储在基本名称为OutputVar的伪数组中。例如,如果变量的名称是Match,则匹配第一个子模式的子字符串将存储在Match1中,第二个子字符串将存储在Match2中,依此类推。这个例外是命名为子模式:它们按名称而不是数字存储。例如,匹配命名子模式的子字符串&#34;(?P \ d {4})&#34;将存储在MatchYear中。如果特定子模式与任何内容都不匹配(或者函数返回零),则相应的变量将变为空白。
因此,您必须使用UnQuotedOutputVar
调用它,例如Match
,然后在Match2
中查看第二个捕获组捕获的内容。