Ben her şeyi ancak belirli bir desen (özellikle index.php
ve ne gibi, aşağıdaki gibi index.php?id=2342343
) ile başlayan bir dize maç mümkün regex gerekir
Ben her şeyi ancak belirli bir desen (özellikle index.php
ve ne gibi, aşağıdaki gibi index.php?id=2342343
) ile başlayan bir dize maç mümkün regex gerekir
Yanıtlar:
Bir regexp uzmanı değil, ama başlangıçtan itibaren negatif bir ileriye bakabileceğinizi düşünüyorum, örneğin ^(?!foo).*$
başlangıçtan itibaren hiçbir şeyle eşleşmemelidir foo
.
^((?!foo).)*$
( stackoverflow.com/a/406408/3964381 )
Regex: aşağıdakiler hariç her şeyi eşleştirin :
foo
):
world.
sonunda hayır ):
foo
) (POSIX uyumlu bir desen yok, üzgünüm):
|
sembolü olan bir dize ile eşleşmekten kaçının ):
foo
):
cat
): /cat(*SKIP)(*FAIL)|[^c]*(?:c(?!at)[^c]*)*/i
veya/cat(*SKIP)(*FAIL)|(?:(?!cat).)+/is
(cat)|[^c]*(?:c(?!at)[^c]*)*
(veya (?s)(cat)|(?:(?!cat).)*
, veya (cat)|[^c]+(?:c(?!at)[^c]*)*|(?:c(?!at)[^c]*)+[^c]*
) ve sonra dil ile kontrol edin: Grup 1 eşleşirse, ihtiyacımız olan şey bu değildir, aksi takdirde, boş değilse eşleşme değerini alın[^a-z]+
(küçük harf ASCII harfi dışında herhangi bir karakter)|
:[^|]+
Demo notu : Yeni satır \n
, komşu satırlara eşleşme taşmasını önlemek için demolarda negatif karakter sınıflarında kullanılır. Tek tek dizeleri test ederken gerekli değildir.
Bağlantı notu : Birçok dilde, \A
dizenin açık başlangıcını tanımlamak için kullanın ve \z
(Python'da, \Z
JavaScript'te, $
sorun yok) dizenin sonunu tanımlamak için kullanın.
Nokta notu : Birçok aromada (ancak POSIX, TRE, TCL'de değil), .
herhangi bir karakterden başka bir karakterle eşleşir . Yeni satır dahil herhangi bir karakterle eşleşmesi için karşılık gelen bir DOTALL değiştirici ( /s
PCRE / Boost / .NET / Python / Java ve /m
Ruby'de) kullandığınızdan emin olun .
.
Backslash not : Eğer (gibi çıkış sıralarını sağlayan C dizeleriyle desenleri beyan etmek zorunda dillerde \n
, motor (değişmez karakter olarak ele böylece özel karakterleri kaçan ters eğik çizgi ikiye katlama gerekmez bir Yenisatır için) örneğin Java, world\.
olacak olarak adlandırılır "world\\."
veya bir karakter sınıfı kullanır:) "world[.]"
. Ham dize değişmez değerleri (Python r'\bworld\b'
), C # kelimesi kelimesine dize değişmez değerleri @"world\."
veya slashy dizeleri / regex değişmez gösterimlerini kullanın /world\./
.
^(?!foo$)
, ifadenin çalışması için neden dolar işaretinin parantez içinde olması gerekir? ^(?!foo)$
Aynı sonuçları vermeyi bekliyordum ama vermedi.
$
Çapa gözün içinde olduğunda, durumun bir parçası, sıfır genişlikli iddianın bir parçasıdır . Dışında olsaydı, olduğu gibi , dize başlangıcından hemen sonra dize sonu gerektiren tüketim modelinin bir ^(?!foo)$
parçası olacak ve negatif geri dönüşü her zaman doğru olacağı için alakasız hale getirecek (dize bittikten sonra herhangi bir metin olamaz) , bırakalım ). Bu nedenle, takip edilmeyen bir dizenin başlangıcını dize bitimiyle eşleştirir . boş bir dizeyle eşleşir. foo
^(?!foo$)
foo
^(?!foo)$
cot
ya da ilk oluşumu arasında alt dizeyi bulmalı lan
ve eşleşmeyi kaldırmalısınız regex.replace(myString, "^.*?(?:cot|lan)\s*", "")
.
^
Bir karakter kümesinin başına, bu karakterlerden başka bir şey eşleştirmek için a koyabilirsiniz .
[^=]*
her şeyle eşleşecek ama =
Eşleştirin, /^index\.php/
ardından eşleşen her şeyi reddedin.
str !~ /\Aindex\.php/
.
Regex her şeyi eşleştirmek mümkün ama belirli bir desen (özellikle index.php ve ne takip, index.php? İd = 2342343 gibi) ile başlayan bir dize dışında gerekir
index.php
Exec yöntemini kullan
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]);
VEYA DİĞER MAÇ
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);
Normal ifade kullanmamaya ne dersiniz:
// In PHP
0 !== strpos($string, 'index.php')
grep
Örneğin komut satırında veya Perl / Python / başka bir dilde veya bir metin düzenleyicide "Her satır için bu normal