2012-12-28 11 views
6

Ich verwendete die Standard \b Wortgrenze. Allerdings behandelt es den Punkt (.) Nicht so, wie ich es möchte.Regex Wortgrenze Alternative

So ist die folgende regex:

\b(\w+)\b

wird cats und dogs in cats.dog übereinstimmen, wenn ich eine Zeichenfolge, die cats and dogs don't make cats.dogs sagt.

Ich brauche eine Wortgrenze Alternative, die ein ganzes Wort übereinstimmen nur, wenn: (.) ​​

  1. es nicht den Punkt enthält Zeichen
  2. es durch mindestens einen Raum eingeschlossen ist() Zeichen auf jede Seite

Irgendwelche Ideen ?!

P.S. Ich brauche dies für PHP

+0

Sie wollen "nicht gierig" –

Antwort

5

Sie versuchen (?<=\s), bevor Sie könnte und (?=\s) nach anstelle der \b um sicherzustellen, dass es einen Raum vor und nach ihm, aber wollen Sie vielleicht auch die Möglichkeit, damit zu Beginn des Seins oder das Ende der Schnur mit (?<=\s|^) und (?=\s|$)

Dies wird automatisch ausschließen „Worte“ mit einem . in ihnen, aber es wäre auch ein Wort am Ende eines Satzes ausschließen, da es keinen Raum zwischen ihm und dem Stillstand .

+0

Danke. Könnte ich auch am Anfang und am Ende eines Satzes Wörter einfügen ?! Ich brauche es vielleicht nicht, aber vielleicht ist es gut zu wissen. –

2

Was Sie versuchen übereinzustimmen, kann leicht mit Array- und String-Funktionen durchgeführt werden.

$parts = explode(' ', $str); 
$res = array_filter($parts, function($e){ 
    return $e!=="" && strpos($e,".")===false; 
}); 

Ich empfehle diese Methode als es Zeit spart. Sonst verschwenden einige Stunden, um eine gute Regex-Lösung zu finden, ziemlich unproduktiv.

+0

Ich brauche dies als Teil einer anderen Regex als erster Schritt einer 'preg_replace' Funktion, so wird es nicht ganz Arbeit für das, was ich brauche –

+0

Dann ist es besser zu tun, um zu fragen, was Sie tatsächlich benötigen. Es könnte eine bessere Lösung als Regex geben. –

Verwandte Themen