Regex 正则表达式以排除所需字符串周围的字符串

Regex 正则表达式以排除所需字符串周围的字符串,regex,regex-lookarounds,rainmeter,regex-look-ahead,Regex,Regex Lookarounds,Rainmeter,Regex Look Ahead,在HTML代码之间: …… 如何编写正则表达式(针对使用Perl正则表达式的Rainmeter),以便: -必需字符串“我只需要此字符串”分组提取 -HTML链接标记…可能是 缺席或在场&也可以出现在所需字符串和多次之间 我的尝试: (?siU)*[>]{0,1}(.*)[{0,1} 其中: *=捕获除换行符以外的所有字符{尽管我同意使用真正的解析器解决此问题的建议,但此正则表达式应该可以解决您的问题: <div [^.<>]|*>(?:[^<>]*<a

HTML代码之间

……

如何编写正则表达式(针对使用Perl正则表达式的Rainmeter),以便:

-必需字符串
“我只需要此字符串”
分组提取

-HTML链接标记
可能是 缺席或在场&也可以出现在所需字符串和多次之间

我的尝试:

(?siU)
*[>]{0,1}(.*)[{0,1}
其中:


*=捕获除换行符以外的所有字符{尽管我同意使用真正的解析器解决此问题的建议,但此正则表达式应该可以解决您的问题:

<div [^.<>]|*>(?:[^<>]*<a [^<>]*>)*([^<>]*)(?:</a>)*</div>
(?:[^]*)*([^]*)(?:)*
逻辑:

  • 开始时需要
    ,结束时需要
  • 允许并忽略匹配文本前任意多次的
  • 允许并忽略匹配文本任意多次后的
  • 忽略任何前面有
    [^]*
    之前的任何文本。使用
    *
    也会起作用,但它会任意跳过所有文本,直到字符串中
    的最后一个实例
  • 我使用
    [^]*
    而不是
    *
    以受保护的方式匹配非标记文本,因为不允许使用文本
  • 我使用
    (?:…)
    分组而不捕获。如果您的编程语言不支持这一点,请改用
    (…)
    ,并调整您使用的匹配项

警告:这不是完全通用的,但应该可以解决您的问题。

您应该使用
XPath
或XML解析器。对于此类内容,不推荐使用正则表达式。
[]
是匹配任何字符的字符类,而不是字符串
[]
表示字符集,
。您的意思可能是
(){0,1}
?另外,
*
将尝试尽可能多地匹配。
*?
可能会起作用,因为它会说尽可能少地匹配。实际上,因为
*
中的
*
后面的所有内容都是可选的,所以第一个
*
将一直匹配到
,中间的所有内容都将匹配为空我同意Amesshiel和choroba的观点,你真的需要一个合适的XML或HTML解析器,而不是正则表达式。
<div [^.<>]|*>(?:[^<>]*<a [^<>]*>)*([^<>]*)(?:</a>)*</div>