Tôi cần một regex có thể khớp mọi thứ trừ một chuỗi bắt đầu bằng một mẫu cụ thể (cụ thể index.php
và những gì tiếp theo, như index.php?id=2342343
)
Tôi cần một regex có thể khớp mọi thứ trừ một chuỗi bắt đầu bằng một mẫu cụ thể (cụ thể index.php
và những gì tiếp theo, như index.php?id=2342343
)
Câu trả lời:
Không phải là một chuyên gia regrec, nhưng tôi nghĩ rằng bạn có thể sử dụng một cái nhìn tiêu cực ngay từ đầu, ví dụ như ^(?!foo).*$
không nên khớp với bất cứ điều gì bắt đầu với foo
.
^((?!foo).)*$
( stackoverflow.com/a/406408/3944381 )
Regex: khớp mọi thứ nhưng :
foo
):
world.
ở cuối):
foo
) (không có nội dung tương thích POSIX, xin lỗi):
|
ký hiệu):
foo
):
cat
): /cat(*SKIP)(*FAIL)|[^c]*(?:c(?!at)[^c]*)*/i
hoặc/cat(*SKIP)(*FAIL)|(?:(?!cat).)+/is
(cat)|[^c]*(?:c(?!at)[^c]*)*
(hoặc (?s)(cat)|(?:(?!cat).)*
, hoặc (cat)|[^c]+(?:c(?!at)[^c]*)*|(?:c(?!at)[^c]*)+[^c]*
) và sau đó kiểm tra bằng ngôn ngữ có nghĩa là: nếu Nhóm 1 khớp, đó không phải là thứ chúng ta cần, nếu không, hãy lấy giá trị khớp nếu không trống[^a-z]+
(bất kỳ ký tự nào khác với chữ ASCII viết thường)|
:[^|]+
Lưu ý demo : dòng mới \n
được sử dụng bên trong các lớp ký tự bị phủ định trong các bản demo để tránh tràn khớp với (các) dòng lân cận. Chúng không cần thiết khi kiểm tra các chuỗi riêng lẻ.
Lưu ý về neo : Trong nhiều ngôn ngữ, sử dụng \A
để xác định bắt đầu chuỗi rõ ràng và \z
(trong Python \Z
, trong JavaScript, $
OK) để xác định phần cuối của chuỗi.
Ghi chú dấu chấm : Trong nhiều hương vị (nhưng không phải POSIX, TRE, TCL), .
phù hợp với bất kỳ char nào ngoài char mới . Đảm bảo bạn sử dụng công cụ sửa đổi DOTALL tương ứng ( /s
trong PCRE / Boost / .NET / Python / Java và /m
trong Ruby) .
để khớp với bất kỳ char nào kể cả dòng mới.
Ghi chú dấu gạch chéo ngược : Trong các ngôn ngữ mà bạn phải khai báo các mẫu có chuỗi C cho phép thoát chuỗi (như \n
đối với dòng mới), bạn cần tăng gấp đôi dấu gạch chéo ngược thoát các ký tự đặc biệt để công cụ có thể coi chúng là ký tự chữ (ví dụ: trong Java, world\.
sẽ khai báo là "world\\."
, hoặc sử dụng một lớp ký tự "world[.]"
:). Sử dụng chuỗi ký tự thô (Python r'\bworld\b'
), chuỗi ký tự C # verbatim hoặc chuỗi ký tự @"world\."
gạch chéo / ký hiệu regex như thế nào /world\./
.
^(?!foo$)
, tại sao ký hiệu đô la phải nằm trong dấu ngoặc đơn để biểu thức hoạt động? Tôi đã mong đợi ^(?!foo)$
để đưa ra kết quả tương tự, nhưng nó không.
$
neo nằm trong diện mạo, nó là một phần của điều kiện, một phần của khẳng định độ rộng bằng không đó . Nếu nó ở bên ngoài, như trong ^(?!foo)$
, nó sẽ là một phần của mô hình tiêu thụ yêu cầu kết thúc chuỗi ngay sau khi bắt đầu chuỗi, làm cho giao diện phủ định không liên quan vì nó sẽ luôn trả về đúng (không thể có bất kỳ văn bản nào sau khi kết thúc chuỗi , hãy để một mình foo
). Vì vậy, ^(?!foo$)
khớp bắt đầu của một chuỗi không foo
được theo sau với chuỗi kết thúc. ^(?!foo)$
phù hợp với một chuỗi trống.
cot
hoặc lan
, và xóa kết quả khớp, như thế nào regex.replace(myString, "^.*?(?:cot|lan)\s*", "")
.
Bạn có thể đặt một ^
phần đầu của một bộ ký tự để khớp với bất cứ thứ gì trừ những ký tự đó.
[^=]*
sẽ phù hợp với tất cả mọi thứ nhưng =
Chỉ cần phù hợp /^index\.php/
sau đó từ chối bất cứ điều gì phù hợp với nó.
str !~ /\Aindex\.php/
.
Tôi cần một thể regex để phù hợp với tất cả mọi thứ nhưng ngoại trừ một chuỗi bắt đầu với
index.php
một mô hình cụ thể (đặc biệt là index.php và những gì sau, giống như index.php? Id = 2.342.343)
Sử dụng phương pháp 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]);
HOẶC MATCH KHÁC
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);
Còn về việc không sử dụng regex:
// In PHP
0 !== strpos($string, 'index.php')
grep
trên dòng lệnh, ví dụ, hoặc Perl / Python / bất kỳ ngôn ngữ nào khác, hoặc một "Execute regex này cho mỗi dòng" lệnh trong một trình soạn thảo văn bản, vv ...)