正则表达式模式(regular expressions pattern)不包含字符串

13 浏览
0 Comments

正则表达式模式(regular expressions pattern)不包含字符串

这个问题之前已经在这里被问过,但是提问者对于一个仅包含2个字符的答案感到满意。我重复他的基本问题:

通常情况下,是否有一种方法可以像使用[^a]来表示不包含字符一样,来表示不包含字符串?

我想创建一个正则表达式,它匹配两个结束字符串和之间的所有内容,但是只有在没有其他给定字符串的出现时才匹配。但是对于引用问题的一般性回答,我会最满意。

例如:

这些字符串是""

它应该匹配

""

但是不应该匹配

""

0
0 Comments

正则表达式(regex)模式是一种用于匹配和操作字符串的强大工具。然而,在某些情况下,我们可能需要找到不包含特定字符串的模式。本文将介绍出现这个问题的原因以及解决方法。

出现这个问题的原因是,通常我们可以使用正则表达式来匹配包含特定字符串的模式。但是,当我们需要匹配不包含特定字符串的模式时,就需要使用一些特殊的技巧。

解决这个问题的方法是使用否定预查(negative lookahead)技术。否定预查是一种用于查找不包含特定字符串的模式的方法。通过在正则表达式中添加否定预查,我们可以指定一个字符串,该字符串不能出现在匹配的模式中。

下面是一个示例正则表达式模式,用于匹配不包含特定字符串的模式:

"^START((?!foobar).)*END$"

在这个模式中,^表示字符串的开头,START和END分别表示模式的起始和结束位置。((?!foobar).)*表示任意字符的重复,但不能包含foobar这个字符串。

这个模式可以用于匹配任何不包含foobar的以START开始、以END结束的字符串。

需要注意的是,虽然正则表达式是解决这个问题的一种方法,但它并不适用于所有情况。特别是在处理HTML内容时,正则表达式可能会遇到一些限制。因此,在处理HTML内容时,更好的解决方法是使用解析器(parser)。

总结起来,当我们需要找到不包含特定字符串的模式时,可以使用正则表达式中的否定预查技术。这种方法可以帮助我们快速准确地匹配出不包含特定字符串的模式。但在处理HTML等特殊内容时,最好使用解析器来解决这个问题。

0
0 Comments

通过使用(?!REGEX)语法,可以使用negative lookahead来解决该问题。negative lookahead能够给出零宽度匹配,也就是说它不会消耗源字符串中的任何字符。

在上面的代码示例中,变量s1包含了一个带有"CENSORED"单词的长字符串,而变量s2则不包含该单词。通过使用^(?!.*CENSORED).*$的正则表达式,可以判断字符串是否不包含"CENSORED"单词。

具体的解决方法如下:

var s1 = "some long string with the CENSORED word";
var s2 = "some long string without that word";
console.log(s1.match(/^(?!.*CENSORED).*$/));//没有匹配
console.log(s2.match(/^(?!.*CENSORED).*$/));//匹配整个字符串

上述代码中的正则表达式^(?!.*CENSORED).*$使用了negative lookahead来判断字符串中是否包含"CENSORED"单词。如果匹配成功,则返回false;否则,返回true。

通过使用negative lookahead,可以方便地判断字符串中是否包含特定的字符串,并根据需要进行相应的处理。

0
0 Comments

正则表达式(regex)是一种用来匹配字符串模式的工具。它可以用于搜索、替换、验证等操作。然而,有时候我们想要找到不包含某个特定字符串的模式。下面的对话是关于这个的问题:

Alan:你读过我对那个问题的回答了吗?我给出了一个更通用的解决方案。在你的情况下,它看起来是这样的:

(?s)<script>(?:(?!</?script>).)*</script>

换句话说:先匹配开头的序列,然后一次匹配一个字符,确保它不是结束序列的开始,然后匹配结束序列。

Bart:我仍然不明白括号中发生了什么,以及为什么它们不匹配,但我会弄清楚的。谢谢。

Alan:这个正则表达式有不平衡的括号。当我修复表达式后,它仍然不能匹配任何一个字符串。

Bart:我已经修复了缺少的括号。但可能仍然不起作用,这种情况下,你的起始和结束标签可能在不同的行上。尝试在建议的正则表达式前面添加(?s),这将让点元字符也匹配换行符:(?s)<script>(?:(?!</script>).)*</script>

Alan:我应该测试一下,即使我之前已经发布过十几次。谢谢,Bart。

Bart:没问题,能看到像你这样的人也犯这些(小)错误,让我感到安慰!

Alan:负向先行断言应该是对<script>而不是</script>

Bart:事实上,应该对两者都进行匹配:(?!</?script>);这匹配可能嵌套的最内层标签。当然,<script>标签不应该被嵌套,但显然提问者实际上并没有匹配这些。我应该更仔细地阅读问题。现在我来修复它。

Alan:实际上,如果你假设标签有任何意义,它是针对</script>的。我给出的例子相当愚蠢 😉 当我使用它时,我首先改变了寻找的是!</script而不是!<script。如果有人嵌套了一个脚本,最好删除所有的标签。

通过上述对话,我们可以看出这个问题的出现原因是因为正则表达式中的括号没有正确匹配,导致无法得到预期的结果。解决方法是修复括号的不平衡,并根据需要添加额外的标志,以确保正则表达式能够匹配到全局。

0