"Stop" ile başlayan dizeyle eşleşecek Normal İfade


102

Bir dizenin başındaki bir kelimeyle eşleşecek bir normal ifadeyi nasıl oluşturabilirim? stopBir dizenin başında eşleştirme arıyoruz ve onu takip eden her şey olabilir.

Örneğin, ifade aşağıdakilerle eşleşmelidir:

stop
stop random
stopping

Teşekkürler.

Yanıtlar:


191

Yalnızca kullanım durdurma ile başlayan satırları eşleştirmek isterseniz

^stop

Dur kelimesiyle başlayan ve ardından bir boşlukla başlayan satırları eşleştirmek isterseniz

^stop\s

Veya, stop kelimesiyle başlayan ancak ardından bir boşluk veya kullanabileceğiniz başka bir kelime olmayan karakterle başlayan satırları eşleştirmek isterseniz (normal ifade tarzınız izin verirse)

^stop\W

Öte yandan, takip eden şey, çoğu normal ifade çeşidinde bir dizenin başındaki bir kelimeyle eşleşir (bu türlerde \ w, \ W'nin tersi ile eşleşir)

^\w

Tadınızda \ w kısayolu yoksa, kullanabilirsiniz

^[a-zA-Z0-9]+

Bu ikinci deyimin yalnızca harf ve rakamlarla eşleşeceğine, hiçbir sembol olmadığına dikkat edin.

Hangi kısayollara izin verildiğini ve tam olarak nelerin eşleştiğini (ve Unicode ile nasıl başa çıktıklarını) öğrenmek için normal ifade çeşidi kılavuzunuza bakın.


28
Cevabınızı genelleştirmek için +1. Stack Overflow'da bundan daha fazlasını görmeyi çok isterim. Bence onu daha iyi bir öğrenme kaynağı yapıyor.
Jim

Büyük / küçük harfe duyarsız hale nasıl getirilir, yani Stop veya stop veya sTop ile eşleştirilir?
Elton Garcia de Santana

Dilinize bağlıdır ... Perl uyumlu, I değiştiriciyi kullanabilir. / regex / i .NET RegexOptions.IgnoreCase ve benzeri
Vinko Vrsalovic

Unutmayın ^stop\b, hattın sonu da dahil olmak üzere herhangi bir sınıra izin verilir
Mad Physicist

81

Bunu dene:

/^stop.*$/

Açıklama:

  • / charachters normal ifadeyi sınırlandırır (yani bunlar kendi başına Normal İfadenin parçası değildir)
  • ^ satırın başındaki eşleşme anlamına gelir
  • . ve ardından * , herhangi bir karakterle (.), herhangi bir sayıda (*) eşleşme anlamına gelir
  • $ satırın sonu anlamına gelir

Bu durağın ardından bir boşluk bırakılmasını zorunlu kılmak istiyorsanız, Normal İfadeyi şu şekilde değiştirebilirsiniz:

/^stop\s+.*$/
  • \ s herhangi bir boşluk karakteri anlamına gelir
  • + Aşağıdaki \ s , en az bir boşluk karakteri durdurma kelime sonra aşağıdaki için araçlar vardır olan

Not: Ayrıca, yukarıdaki Normal İfadenin durdurma kelimesinden sonra bir boşluk olmasını gerektirdiğini unutmayın! Dolayısıyla, yalnızca şunu içeren bir satırla eşleşmez: stop


Tüm diller normal ifadeleri sınırlandırmak için eğik çizgi kullanmaz.
JAB

1
@Cat Megex: İşte tam da bu yüzden açıklamayı ekledim. Diliniz normal ifadeyi sınırlandırmak için başka bir şey kullanıyorsa, / karakterini doğru karakterle değiştirin
Mike Dinescu

1
@Mez evet, ve böyle bir fazlalık hem netliği hem de performansı artırıyor rexegg.com/regex-optimizations.html#anchors
MarredCheese

31

Bir kelimeden sonra herhangi bir şeyi eşleştirmek istiyorsanız, sadece satırın başında değil, kullanabilirsiniz: \bstop.*\b- kelime ve ardından satır

İpin sonuna kadar kelime

Veya dizedeki kelimeyi eşleştirmek istiyorsanız \bstop[a-zA-Z]*- sadece stop ile başlayan kelimeleri kullanın

Sadece stop ile başlayan kelimeler

Veya ^stop[a-zA-Z]*sadece kelime için durdurmalı satırların başlangıcı - yalnızca ilk kelime
Tüm satır ^stop.*- yalnızca dizenin ilk satırı

Stop ile başlayan her dizeyi satırsonu satırları da dahil olmak üzere eşleştirmek istiyorsanız şunu kullanın: /^stop.*/s- stop ile başlayan çok satırlı dizge


20

@SharadHolani'nin söylediği gibi. Bu, " durdur " ile başlayan her kelimeyle eşleşmez

. Sadece " gitmeyi bırak " gibi bir satırın başındaysa . @Waxo doğru cevabı verdi:

" Stop " ile başlayan ve A'dan Z'ye harflerden başka hiçbir şey içermeyen herhangi bir kelimeyi eşleştirmek istiyorsanız, bu biraz daha iyidir .

\bstop[a-zA-Z]*\b

Bu hepsiyle eşleşir

durdur (1)

rastgele durdur (2)

durdurma (3)

durdurmak istiyorum (4)

lütfen dur (5)

Fakat

/^stop[a-zA-Z]*/

yalnızca (1) ile (3) 'e kadar eşleşir, ancak (4) ve (5) ile eşleşmez


8
/stop([a-zA-Z])+/

Herhangi bir durdurma sözcüğüyle eşleşecek (durdur, durduruldu, durduruluyor vb.)

Ancak, sadece bir dizenin başında "durdur" ile eşleşmek istiyorsanız

/^stop/

yapacak: D


2
Bu "gitmeyi
Alex B

1
Bu stop123 veya stop ile eşleşmeyecektir.
lostintranslation

7

"Gitmeyi bırak", "dur" ve "dur" dahil olmak üzere "dur" ile başlayan herhangi bir şeyi eşleştirmek istiyorsanız şunu kullanın:

^stop

Durdurma sözcüğünü ve ardından "gitmeyi bırak", "bunu durdur" gibi bir şeyle eşleştirmek istiyorsanız , ancak "durdu" değil ve "durma" değil, şunu kullanın:

^stop\W

0

Bu soruna basit bir düzenli ifade yaklaşımı önermem. Diğer alakasız kelimelerin alt dizeleri olan çok fazla kelime var ve zaten sağlanan daha basit çözümlere aşırı uyum sağlamaya çalışırken muhtemelen kendinizi delirteceksiniz.

Metni önce işlemek için en azından saf bir kök belirleme algoritması (Porter stemmer'ı deneyin; çoğu dilde mevcut, ücretsiz kod vardır) isteyeceksiniz. Bu işlenmiş metni ve önceden işlenmiş metni iki ayrı alana bölünmüş dizide saklayın. Alfabetik olmayan her karakterin de bu dizide kendi dizinini aldığından emin olun. Filtrelediğiniz kelimelerin listesi ne olursa olsun, onları da köklendirin.

Bir sonraki adım, köklü 'durdurma' sözcükler listenizle eşleşen dizi dizinlerini bulmak olacaktır. Bunları işlenmemiş diziden kaldırın ve ardından boşluklara yeniden katılın.

Bu sadece biraz daha karmaşıktır, ancak çok daha güvenilir bir yaklaşım olacaktır. Daha NLP odaklı bir yaklaşımın değeri hakkında herhangi bir şüpheniz varsa, clbuttic hatalarıyla ilgili biraz araştırma yapmak isteyebilirsiniz .


0

Sözcüğün "durdur" ile başlamasını istiyorsanız, aşağıdaki kalıbı kullanabilirsiniz. "^ durdur. *"

Bu, stop ile başlayan sözcüklerle ve ardından herhangi bir şeyle eşleşir.


1
Sadece kullanamaz "^stop"mısın?
Stephen Rauch

Değişir. Java sözdizimi açısından konuşurken, String nesnesi ile regex veya doğrudan kullanım .matches () yöntemini kullanmak için Pattern ve Matcher nesnesini kullanabiliriz. Sonuçlar aşağıdaki gibi farklılık gösteriyor: code String line = "stopped"; String pattern = "^stop"; Pattern r = Pattern.compile(pattern); Matcher m = r.matcher(line); System.out.println(m.find( )); //prints true System.out.println(line.matches(pattern)); //prints false
Manisha Chaurasia

1
Bu, yalnızca satırın başındaki kelime ile eşleşir. "Durdur" ile başlayan kelimeler satırın ortasında veya sonundaysa, bu normal ifade eşleşmez. @StephenRauch [az] * 'ı atlarsanız, bütün olarak "durmak" gibi kelimeler almazsınız. "Durdurma" durumunda "dur" alırsınız ve "ping" eksik olur.
Sedat Kilinc
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.