2017-03-24 28 views
5

Załóżmy Mam następujący temat:Przechwytywanie z negatywnym spojrzeniem za

abcdef ghidef 

i chcę dopasować słowo kończąc def nie poprzedzone abc (w tym przypadku byłoby ghidef). Jak mogę to dopasować?

Gdy używam:

(?<!abc)def 

Dostaję 2nd def ale ja nie dostaję ghi tutaj.

+0

[* "To twierdzenie jest test na postaci następujących lub poprzedzających bieżący pasujące do punktu, w którym ** tak naprawdę nie zużywa żadnych znaków. ** "*] (http://php.net/manual/en/regexp.reference.assertions.php) – Rizier123

+0

Twoje pytanie jest bardzo niejasne: powinieneś był powiedzieć trzeba dopasować słowa, które nie zaczynają się od 'abc', a kończą na' def'. –

Odpowiedz

3

Nie ma potrzeby szukania. Można skorzystać z ujemnym uprzedzona:

\b(?!abc)\w*def\b 

RegEx Demo

RegEx Breakup:

  • \b - dochodzić słowo granicznej
  • (?!abc) - jest ujemny uprzedzona, że ​​twierdzi słowo robi zacznij od abc po \b (granica słowa)
  • \w* - mecz 0 lub więcej znaków słowo
  • def - kończąc tekst słowa jest def
  • \b - słowo granica
+1

Wielkie dzięki. Oto, co starałem się osiągnąć :) –