我需要一个正则表达式能够匹配所有但一个以特定模式开头的字符串(特别是index.php
以及后面的内容,如index.php?id=2342343
)
答案 0 :(得分:223)
您可以在字符集的开头添加^
以匹配除这些字符之外的任何内容。
[^=]*
将匹配=
答案 1 :(得分:218)
正则表达式:匹配所有但:
foo
开头):
world.
):
foo
的字符串)(没有符合POSIX标准的patern,抱歉):
|
符号的字符串):
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组匹配,则不是我们需要的,否则,抓住匹配值,如果不为空[^a-z]+
(除小写ASCII字母以外的任何字符)|
:[^|]+
演示说明:换行符\n
用于演示中的否定字符类,以避免匹配溢出到相邻行。在测试单个字符串时,它们不是必需的。
主播备注:在许多语言中,使用\A
来定义明确的字符串开头,并使用\z
(在Python中,它是\Z
, JavaScript,$
可以定义字符串的最后一部分。
点注:在许多版本中(但不是POSIX,TRE,TCL),.
匹配任何字符,但新行字符。确保使用相应的DOTALL修饰符(PCRE / Boost / .NET / Python / Java中的/s
和Ruby中的/m
).
来匹配任何包含换行符的字符。< / p>
反斜杠注释:在必须使用允许转义序列的C字符串声明模式的语言中(如换行符为\n
),您需要加倍转义特殊字符的反斜杠,以便引擎可以将它们视为文字字符(例如,在Java中,world\.
将声明为"world\\."
,或使用字符类:"world[.]"
)。使用原始字符串文字(Python r'\bworld\b'
),C#逐字字符串文字@"world\."
或字符串/正则表达式文字符号,如/world\./
。
答案 2 :(得分:183)
不是正则表达式专家,但我认为您可以从一开始就使用负面预测,例如: ^(?!foo).*$
不应与以foo
开头的任何内容匹配。
答案 3 :(得分:5)
在python中:
>>> import re
>>> p='^(?!index\.php\?[0-9]+).*$'
>>> s1='index.php?12345'
>>> re.match(p,s1)
>>> s2='index.html?12345'
>>> re.match(p,s2)
<_sre.SRE_Match object at 0xb7d65fa8>
答案 4 :(得分:4)
只需匹配/^index\.php/
,然后拒绝匹配它。
答案 5 :(得分:0)
我需要一个能够完全匹配所有内容的正则表达式,但除外是一个字符串 以
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);
答案 6 :(得分:-3)
shell中的grep -v
!〜perl
请用其他语言添加更多内容 - 我将其标记为社区Wiki。
答案 7 :(得分:-7)
如何不使用正则表达式:
// In PHP
0 !== strpos($string, 'index.php')