2016-03-23 17 views
1

aşağıdaki eşleşen kelimeler için regex vardır: Aşağıdaki dize içinMaç tire ile kelime ve kesme

\w+(?:'|\-\w+)? 

:

syea'don't:

' 's yea' don't -yeah no- ice-cream ' 

aşağıdaki eşleşmeleri verir yeahnoice-cream

Ancak, aşağıdaki eşleşmeleri istiyorum: don'tyeahnoice-cream

bir kelime ancak bir çizgi ile başlayamaz veya kesme işareti sona erebilir beri

'syea'. Not: Bir 'kendi başına eşleştirilmemelidir.

+0

. '' 've' yea '' kesme işlemiyle başlayıp sona eriyor. –

+0

@noob Doğru, şimdi bunu çözdüm! – Baz

cevap

4

Sizin \w+(?:'|\-\w+)?, \w bir sözcük karakteri ile eşleşmeye başlar, dolayısıyla ' ile başlayan tüm "kelimeler" gereksinimlerle eşleşmiyor.

Bir karakter sınıfa \w ve ' içerebilir ve ? ile sonunda * yerine, bir "kelime" sadece 1 tire olabilir Eğer regex demo

Bkz

'?\w[\w']*(?:-\w+)*'? 

kullanmak miktar belirleyici.

Dağılım:

  • '? - opsiyonel kesme işareti
  • \w - Bir kelime karakter
  • [\w']* - 0+ sözcük karakteri ya da bir kesme işareti
  • (?:-\w+)* - arasında 0+ dizileri
    • - - tire işareti
    • \w+ - 1+ kelime karakteri
  • '? - başlatmak veya tire ile ancak bir apostrophe._ Kibritlerini çelişmektedir ile sona erebilir bir kelimenin _Since opsiyonel kesme işareti
+0

Bu, kendi başına bir 'eşleşecektir. Bunu eşleştirmek istemiyorum. – Baz

+0

Başka bir desenle güncelledim, ancak belki de ['(?: \ B '\ b)? \ W + (?: [-'] \ w +) * (?: \ B '\ B)? ] (https://regex101.com/r/rN7hV8/3) –