2016-04-08 13 views
-1

Bir cümlenin sonundan sonraki ilk karakterin küçük harf olup olmadığını tespit etmek istiyorum. Örneğinregex: bir cümlenin sonundan sonra karakterin küçük harf olup olmadığını algıla

: Bir cümlenin sonu bu karakterlerin ile tanımlanır

Howdy world? lorem // match 
Howdy world... lorem // match 
Howdy world? lorem // match 
What is reality. howdy // match 
Howdy you. Lorem // no match 
Howdy you. 進撃の // no match 

: .!?

Bunu başarmak için kullanabilirsiniz regex ne tür

?

+1

Bu son cümle noktalama işaretleriyle eşleştirildiyse, bunlar boşluk ve küçük harfle takip edilir mi? –

+0

Evet, ancak birden fazla beyaz alan olabilir. Yukarıda gördüğüm üçüncü örnekte olduğu gibi. –

cevap

2

onlar boşluk ve küçük harfle takip eğer, cümle noktalama işaretleri bu son maç

'~\w+[.?!]+\s+(?=\p{Ll})~u' 

regex demo

Açıklama Bkz kullanmak için:

  • \w+ - 1+ alfanümerik/alt çizgi sembolleri
  • [.?!]+ - 1+ literal ., ? veya !
  • \s+ - 1+ boşluk sembolleri ...
  • (?=\p{Ll}) - 1+ boşluk karakterleri ile izlenen küçük harfle takip edilen (bkz \p{Ll} detayları ve daha Unicode kategori sınıfları için Unicode character properties).

PHP'de, Unicode dizeleriyle çalıştığınız için /u değiştiricisini kullanın. İşte

bir PHP code demo geçerli:

$re = '~\w+[.?!]+\s+(?=\p{Ll})~u'; 
$arr = array("Howdy world? lorem", "Howdy world... lorem", "Howdy world? lorem", "What is reality. howdy ", 
    "Howdy you. Lorem ", "Howdy you. 進撃の "); 
print_r(preg_grep($re, $arr)); 
// => Array([0] => Howdy world? lorem [1] => Howdy world... lorem 
//[2] => Howdy world? lorem [3] => What is reality. howdy) 
+0

Bu tam olarak aradığım şey. Sadece bir tane soru kaldı. Bir eşleşme bulduğunda, cümlenin bitiş sözcüğünü (son noktalama işareti dahil) vurgulamak mümkün olur. Bu örneğe bakınız: https://regex101.com/r/gR5hB8/2 - ** dünyası? ** ve ** dünyası ... ** vb. Vurgulanmalıdır. –

+2

Belki de [''~ \ w + [.?!] (? = \ S + \ p {Ll}) ~ u' '(https://regex101.com/r/gR5hB8/3). Ya da, kelime ile son noktalama işareti arasında boşluk olabiliyorsa, '\ s *' sonra '\ w +' ekleyin. –

+0

EVET! Tam olarak, cümlenin sonunu takip eden beyaz boşluğun eklenmesi de mümkündür, lütfen açıklama için resme bakınız: http://i.imgur.com/Zm6SPCE.jpg –

1

Öyle gibi bir şey kullanarak deneyebilirsiniz: [.!?]\s*[a-z] (here mevcut örnek).

Bu

sonra ., ! veya ? karakter ve isteğe bağlı beyaz boşluk olduğunu İngiliz alfabesinin herhangi küçük harf eşleşir.

İlgili konular