php正则表达式除什么之外,正则表达式:匹配除特定模式以外的所有内容

我需要一个能够匹配除以特定模式(特别是index.php及其后的内容,例如index.php?id=2342343)开头的字符串之外的所有内容的正则表达式

您不希望匹配哪种特定模式?

是否有原因为什么您不能匹配您的模式,并且如果字符串与之匹配则无法执行某些操作?

正则表达式可能重复,以匹配不包含单词的行?

正则表达式:匹配所有内容,但:

以特定模式开头的字符串(例如,any-也为空-不是以foo开头的字符串):

基于先行的NFA解决方案:

^(?!foo).*$

^(?!foo)

用于正则表达式引擎的基于否定字符类的解决方案不支持环视:

^(([^f].{2}|.[^o].|.{2}[^o]).*|.{0,2})$

^([^f].{2}|.[^o].|.{2}[^o])|^.{0,2}$

以特定模式结尾的字符串(例如,末尾没有world.):

基于后向的解决方案:

(?

^.*(?

POSIX解决方法:

^(.*([^w].{5}|.[^o].{4}|.{2}[^r].{3}|.{3}[^l].{2}|.{4}[^d].|.{5}[^.])|.{0,5})$

([^w].{5}|.[^o].{4}|.{2}[^r].{3}|.{3}[^l].{2}|.{4}[^d].|.{5}[^.]$|^.{0,5})$

包含特定文本的字符串(例如,不匹配具有foo的字符串)(没有POSIX兼容模式,抱歉):

^(?!.*foo)

^(?!.*foo).*$

包含特定字符的字符串(例如,避免匹配具有|符号的字符串):

^[^|]*$

一个等于某个字符串的字符串(例如,不等于foo):

环视为主:

^(?!foo$)

^(?!foo$).*$

POSIX:

^(.{0,2}|.{4,}|[^f]..|.[^o].|..[^o])$

字符序列:

PCRE(匹配除cat之外的任何文本):/cat(*SKIP)(*FAIL)|[^c]*(?:c(?!at)[^c]*)*/i或/cat(*SKIP)(*FAIL)|(?:(?!cat).)+/is

其他允许环视的引擎:(cat)|[^c]*(?:c(?!at)[^c]*)*(或(?s)(cat)|(?:(?!cat).)*或(cat)|[^c]+(?:c(?!at)[^c]*)*|(?:c(?!at)[^c]*)+[^c]*),然后使用语言进行检查,表示:如果第1组匹配,则不是我们所需要的,否则,如果不为空,则获取匹配值

某个单个字符或一组字符:

使用否定的字符类:[^a-z]+(除小写ASCII字母以外的任何字符)

匹配除|以外的任何字符:[^|]+

演示说明:换行符在演示中的否定字符类内使用,以避免匹配溢出到相邻行。测试单个字符串时,它们不是必需的。

锚注:在许多语言中,使用\A定义字符串的明确开头,并使用\z(在Python中为\z,在JavaScript中为$可以)定义字符串的最后。

点注释:在许多版本中(但不是POSIX,TRE,TCL),.匹配除换行符以外的任何字符。确保对.使用相应的DOTALL修饰符(在PCRE / Boost / .NET / Python / Java中为/s,在Ruby中为/m),以匹配包括换行符在内的任何字符。

反斜杠注意:在必须使用C字符串声明允许转义序列的模式的语言中(例如用于换行符),您需要将反斜杠加倍以转义特殊字符,以便引擎可以将它们视为文字字符(例如,在Java中) ,world\.将声明为"world\\.",或使用字符类:"world[.]")。使用原始字符串文字(Python r'\bworld\b'),C#逐字字符串文字@"world\."或斜线字符串/正则表达式文字符号,例如/world\./。

伟大的写作!对于"字符串(不等于某个字符串)"的情况,以^(?!foo$)为例,为什么必须在括号内包含美元符号才能使表达式起作用?我期望^(?!foo)$给出相同的结果,但事实并非如此。

@GrantHumphries:当$锚位于前瞻区域内时,它是条件的一部分,是零宽度断言的一部分。如果它在外部,如^(?!foo)$中那样,它将成为消耗模式的一部分,要求在字符串开始后立即结束字符串,使否定的前瞻无关紧要,因为它始终返回true(在字符串的结尾,更不用说foo)。因此,^(?!foo$)匹配不以foo开头的字符串的开头,该字符串以结尾的结尾。 ^(?!foo)$匹配一个空字符串。

@ robots.txt请删除这些注释。您在问一个XY问题。字符类用于匹配单个字符,无法用它们定义字符序列。您可能应该只找到字符串开头与第一次出现cot或lan之间的子字符串,然后删除匹配项,例如regex.replace(myString,"^.*?(?:cot|lan)\s*","")。

您可以在字符集的开头放置一个^以匹配那些字符以外的任何字符。

[^=]*

将匹配除=之外的所有内容

没错,但一次只能处理一个字符。如果要排除两个或多个字符的序列,则必须像其他响应者所说的那样使用负前瞻。

不是正则表达式专家,但我认为您可以从一开始就使用否定的前瞻功能,例如^(?!foo).*$不应与以foo开头的任何内容匹配。

与grep一起使用-P启用先行。

如果您期望的行为不匹配" foo"或" bar",请检查以下答案:stackoverflow.com/a/2404330/874824

这个答案是错误的,快速测试表明。我认为您的意思是^((?!foo).)*$(stackoverflow.com/a/406408/3964381)

请您解释一下您使用的符号以及为什么使用它们吗?

在python中:

>>> import re

>>> p='^(?!index\.php\?[0-9]+).*$'

>>> s1='index.php?12345'

>>> re.match(p,s1)

>>> s2='index.html?12345'

>>> re.match(p,s2)

那将拒绝" index_php"或" index#php"。

好点,忘了逃避。谢谢。

只需匹配/^index\.php/,然后拒绝任何匹配的内容。

为什么不做这项工作?

模式否定呢?

I need a regex able to match everything but except a string

starting with index.php a specific pattern (specifically index.php

and what follows, like index.php?id=2342343)

使用方法Exec

let match,

arr = [],

myRe = /([\s\S]+?)(?:index\.php\?id.+)/g;

var str = 'http://regular-viragenia/index.php?id=2342343';

while ((match = myRe.exec(str)) != null) {

arr.push(match[1]);

}

console.log(arr);

var myRe = /([\s\S]+?)(?:index\.php\?id=.+)/g;

var str = 'http://regular-viragenia/index.php?id=2342343';

var matches_array = myRe.exec(str);

console.log(matches_array[1]);

或其他比赛

let match,

arr = [],

myRe = /index.php\?id=((?:(?!index)[\s\S])*)/g;

var str = 'http://regular-viragenia/index.php?id=2342343index.php?id=111index.php?id=222';

while ((match = myRe.exec(str)) != null) {

arr.push(match[1]);

}

console.log(arr);

grep -v在外壳中

!?在perl中

请添加其他语言的其他内容-我将此标记为社区Wiki。

OP特别要求使用正则表达式...我不确定这是否有帮助! (他当然有请求正则表达式的理由;他没有问,"我怎么能用任意技术解决这个问题?")

如何不使用正则表达式:

// In PHP

0 !== strpos($string, 'index.php')

OP特别要求使用正则表达式...我不确定这是否有帮助! (例如,他可能在命令行上使用grep或Perl / Python /任何其他语言,或者在文本编辑器中使用"为每行执行此正则表达式"命令等)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值