向复杂的正则表达式添加例外(使用前瞻和后瞻)
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”,例如 <p>
起始标签,则仅匹配文字。 2) 只有当<
后跟/p
时,文字才应该匹配,例如</p>
结束标记。
怎样才能做到这一点?
示例:只有粗体才应该匹配。
<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】:如果您要搜索的文本只是混合了一些 <a>
标记的文本,那么您可以简化环视的 <
和 >
部分,并给出一个不应遵循的特定字符串作者:</a>
.
/\b(?<![-#\/])literal(?!<\/a>)\b/i
Regex101 Demo
【讨论】:
谢谢!好办法,没想到。以上是关于向复杂的正则表达式添加例外(使用前瞻和后瞻)的主要内容,如果未能解决你的问题,请参考以下文章