我需要能够匹配一切正则表达式,但以特定模式开始的字符串(特别是index.php
和下面,像index.php?id=2342343
)
我需要能够匹配一切正则表达式,但以特定模式开始的字符串(特别是index.php
和下面,像index.php?id=2342343
)
Answers:
不是正则表达式专家,但我认为您可以从一开始就使用否定的前瞻功能,例如,^(?!foo).*$
不应该匹配以开头的任何内容foo
。
^((?!foo).)*$
(stackoverflow.com/a/406408/3964381)
正则表达式:匹配所有内容,但:
foo
):
world.
末尾没有):
foo
)(没有POSIX兼容模式,抱歉):
|
符号的字符串):
foo
):
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组匹配,则不是我们需要的,否则,如果不为空,则获取匹配值演示说明:换行符\n
在演示中的否定字符类内使用,以避免匹配溢出到相邻行。测试单个字符串时,它们不是必需的。
锚注:在许多语言中,用于\A
定义字符串的明确开头,并且\z
(在Python中为\Z
,在JavaScript中$
为OK)可以定义字符串的末尾。
点注释:在许多样式中(但不包括POSIX,TRE,TCL),都.
匹配除换行符以外的任何字符。确保您使用相应的DOTALL修饰符(/s
在PCRE / Boost / .NET / Python / Java和/m
Ruby中).
来匹配任何包含换行符的字符。
反斜杠注:在您必须声明与C字符串允许转义序列(如模式语言\n
的新行),你需要加倍反斜杠转义特殊字符,使得发动机可以把它们当作文字字符(例如在Java中,world\.
将声明为"world\\."
,或使用字符类:)"world[.]"
。使用原始字符串文字(Python r'\bworld\b'
),C#逐字字符串文字@"world\."
或像这样的斜杠/正则表达式文字符号/world\./
。
^(?!foo$)
,为什么必须在括号内包含美元符号才能使表达式起作用?我期望^(?!foo)$
给出相同的结果,但事实并非如此。
$
锚点位于前瞻区域内时,它是条件的一部分,是零宽度断言的一部分。如果它在外部(如in)^(?!foo)$
,它将成为使用模式的一部分,要求在字符串开始后立即结束字符串,从而使负前行无关紧要,因为它始终返回true(字符串结束后不能有任何文本) ,更不用说foo
)。因此,^(?!foo$)
匹配不跟在foo
后面的字符串的开头,再跟后面的字符串结尾。^(?!foo)$
匹配一个空字符串。
cot
or 的第一次出现之间的子字符串lan
,然后删除匹配项,例如regex.replace(myString, "^.*?(?:cot|lan)\s*", "")
。
我需要一个正则表达式可以匹配所有,但除外一个字符串开始
index.php
的特定模式(特别的index.php和下面,像的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);