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

时间:2016-10-02 15:42:47

标签: regex exception lookahead lookbehind

我喜欢正则表达式的一些帮助,因为我并不熟悉。 到目前为止,我创建了以下正则表达式:

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

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

  

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

     

负面观察(?])

     

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

     

匹配[# - /&gt;]

下面列表中的单个字符      

#匹配字符#crowrally(不区分大小写)

     

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

     

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

     

&GT;匹配字符&gt;从字面上看(不区分大小写)

     

literal字面匹配字符文字(不区分大小写)

     

否定前瞻(?![\&lt; \&#39; \&#34;])

     

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

     

匹配下面列表中的单个字符[\&lt; \&#39; \&#34;]

     

\&LT;匹配字符&lt;从字面上看(不区分大小写)

     

\&#39;匹配角色&#39;从字面上看(不区分大小写)

     

\&#34;匹配角色&#34;从字面上看(不区分大小写)

     

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

     

全球模式标志

     

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

我想为此匹配规则添加两个例外。 1)如果&#34;&gt;&#34;之前是&#34; p&#34;,例如<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>

我知道我有过于复杂的事情,但情况本身就很复杂,我想我别无他法。

1 个答案:

答案 0 :(得分:0)

如果您搜索的文字只是与某些<a>标签混合的文字,那么您可以简化外观的<>部分,并提供具体内容字符串,它不应该跟着:</a>

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

Regex101 Demo