【问题标题】:excluding an exact phrase in regular expression排除正则表达式中的确切短语
【发布时间】:2013-03-08 18:33:57
【问题描述】:

这是我的代码的一部分,用于在 p、span、a 和其他一些标签中查找“1”,也在“{changenumber}”和“{/changenumber}”之间的任何位置,然后将其替换为“2” :

查找代码:

(((<(p|span|a|li|ul|br|/br|tr|td)[^>]*>)|(\{changenumber\}))[^<|(\{/changenumber\})]*)1(.*(<|(\{/changenumber\})))

和替换代码:

\12\7

但有一个问题它排除了[^&lt;|(\{/changenumber\})]这个短语的所有字符:"{","c","h","a"

我尝试了\b\{/changenumber\}\b(?!...),但我做不到!

它如何排除“{changenumber}”这个确切的短语?!


以更简单的方式:

当我们写 [^abc]+ 时,它排除了“a”和“b”和“c”,但是如果我们希望它排除确切的“abc”,该怎么办?!

[^(abc)]+ 不起作用

[^\babc\b]+ 不起作用

(?!abc) 不起作用

(?!\babc\b) 不起作用

...


它的语言是英语

我使用正则表达式是因为它是在 joomla 中的 rereplacer 组件中替换的方式

不可能?!!!

【问题讨论】:

标签: regex phrase


【解决方案1】:

当我们写 [^abc]+ 时,它排除了“a”和“b”和“c”,但是什么是 如果我们希望它排除确切的“abc”?!

[^(abc)]+ 不起作用

[^\babc\b]+ 不起作用

(?!abc) 不起作用

这是错误的;负前瞻工作;如果它似乎没有,则使用有问题。

但有一个问题:它排除了[^&lt;|(\{/changenumber\})] 中的所有 这个短语的字符——“{”、“c”、“h”、“a”等。

而不是

[^<|(\{/changenumber\})]

((?!\{/changenumber\})[^<])

——我。例如,将前瞻放在否定集的前面。

此外,您应该将 .* 替换为 .*? 以使其不贪婪。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-26
    • 2021-02-19
    • 1970-01-01
    • 1970-01-01
    • 2018-05-18
    • 1970-01-01
    • 2016-08-21
    相关资源
    最近更新 更多