Ben her şeyi ancak belirli bir desen (özellikle index.phpve 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.phpve 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]*)*/iveya/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, \Adizenin açık başlangıcını tanımlamak için kullanın ve \z(Python'da, \ZJavaScript'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 ( /sPCRE / Boost / .NET / Python / Java ve /mRuby'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)$
cotya da ilk oluşumu arasında alt dizeyi bulmalı lanve 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