2017-08-23 4 views
1

Ich weiß, dass es bereits einige ähnliche Fragen gibt. Aber kann dieses Problem nicht mit Regex beheben.Ignoriere ein Wort mit Regex

Ich habe Satz wie

Lorem Ipsum ist http://stack.com Text der http://stack.com/wp-admin Druck und Satz Industrie.

Ich möchte das Wort „stack.com“ zwischenzuspeichern, aber nicht stack.com/wp-admin

Ich habe einige regex versucht, aber es funktioniert nicht.

^(?!stack.com$).* 
+0

@anubhava Dann, wenn 'stack.com' mit einem Komma gefolgt ist, wird es nicht übereinstimmen. –

+0

ok dann wahrscheinlich: '\ bstack \ .com (?! [/?])' – anubhava

Antwort

1

Die ^(?!stack.com$).* Regex passt zu jedem String (auch eine leere), die nicht mit stack.com beginnt.

stack.com zu passen, aber nicht in stack.com/wp-admin, benötigen Sie eine negative Vorschau:

/stack\.com(?!\/wp-admin)/ 
      ^^^^^^^^^^^^^ 

Oder besser, mit Wortgrenzen nur ganze Worte zum Spiel:

/\bstack\.com\b(?!\/wp-admin)/ 

Siehe regex demo

Details:

  • \b - eine führende Wortgrenze
  • stack\.com - eine Zeichenkette stack.com (ein Punkt entwertet werden muss)
  • \b - eine Hinterwortgrenze
  • (?!\/wp-admin) - ein negativer Look-Ahead, dass die versagt passen, wenn sich /wp-admin unmittelbar rechts neben dem aktuellen Standort befindet.
+0

Ich glaube nicht, dass man einen Blick voraus braucht. Bei den oben genannten Problemen könnte man einfach nach "stack \ .com $" suchen - besondere Aufmerksamkeit auf den End-Space-Char. – blauerschluessel

+0

@blauerschluessel Ich denke, OP will 'stack.com' in' On stack.com, Sie können mehr lernen ... '. So sieht eine Wortgrenze mit einem Lookahead lebensfähig aus. –

+0

Definitiv, tut es. – blauerschluessel