向复杂的正则表达式添加例外(使用前瞻和后瞻)

Posted

技术标签:

【中文标题】向复杂的正则表达式添加例外(使用前瞻和后瞻)【英文标题】:Add exceptions to complex regular expression (lookahead and lookbehind utilized) 【发布时间】:2016-10-02 15:42:46 【问题描述】:

我想要一些关于正则表达式的帮助,因为我不是很熟悉。 到目前为止,我已经创建了以下正则表达式:

/\b(?<![\#\-\/\>])literal(?![\<\'\"])\b/i

正如https://regex101.com/ 所说:

\b 在单词边界处断言位置 (^\w|\w$|\W\w|\w\W)

负向回溯 (?])

断言下面的正则表达式不匹配

匹配下面列表中的单个字符 [#-/>]

# 匹配字符 # 字面意思(不区分大小写)

- 匹配字符 - 字面意思(不区分大小写)

/ 匹配字符 / 字面意思(不区分大小写)

> 匹配字符 > 字面意思(不区分大小写)

literal 匹配字面量的字面量(不区分大小写)

负前瞻 (?![\

断言下面的正则表达式不匹配

匹配下面列表中的单个字符 [\

\

\' 匹配字符 ' 字面意思(不区分大小写)

\" 匹配字符 " 字面意思(不区分大小写)

\b 在单词边界处断言位置 (^\w|\w$|\W\w|\w\W)

全局模式标志

i 修饰符:不敏感。不区分大小写的匹配(忽略 [a-zA-Z])

我想为此匹配规则添加两个例外。 1) 如果“>”前面有“p”,例如 &lt;p&gt; 起始标签,则仅匹配文字。 2) 只有当&lt; 后跟/p 时,文字才应该匹配,例如&lt;/p&gt; 结束标记。 怎样才能做到这一点?

示例:只有粗体才应该匹配。

<p>
    **Literal** in computer science is a
    <a href='http://www.google.com/something/literal#literal'>literal</a>
    for representing a fixed value in source code. Almost all programming 
    <a href='http://www.google.com/something/else-literal#literal'>languages</a>
    have notations for atomic values such as integers, floating-point 
    numbers, and strings, and usually for booleans and characters; some
    also have notations for elements of enumerated types and compound
    values such as arrays, records, and objects. An anonymous function
    is a **literal** for the function type which is **LITERAL**
</p>

我知道我的事情过于复杂,但情况本身就是复杂的,我想我没有别的办法了。

【问题讨论】:

你能举一个输入和输出的例子吗?你用什么编程语言使用正则表达式? @4castle 我添加了一个例子。你介意像以前一样重新编辑它吗?不知道如何添加实际的 html 这是什么编程语言?看起来您需要一个 HTML 解析器,而不是正则表达式。请阅读XY Problem。 他们从不学习,无论我们如何努力,他们都会一次又一次地回来。请不要使用 REGEX 解析 HTML,请使用 HTML 解析器:***.com/a/1732454/460557 如果这样可以简化事情,那么文本中可能只有两种标签。 p 标签和 a 标签。 【参考方案1】:

如果您要搜索的文本只是混合了一些 &lt;a&gt; 标记的文本,那么您可以简化环视的 &lt;&gt; 部分,并给出一个不应遵循的特定字符串作者:&lt;/a&gt;.

/\b(?<![-#\/])literal(?!<\/a>)\b/i

Regex101 Demo

【讨论】:

谢谢!好办法,没想到。

以上是关于向复杂的正则表达式添加例外(使用前瞻和后瞻)的主要内容,如果未能解决你的问题,请参考以下文章

JS 正则表达式否定匹配(正向前瞻)

如何在正则表达式中使用前瞻和 $

Prometheus(公制)使用逆正则表达式匹配/负前瞻重新标记配置

Java 和 C# 正则表达式不产生相同的结果

PHP正则表达式检查长度而不使用前瞻

js-正则表达式边界符和前瞻后顾的使用-保证你看明白