2012-12-28 10 views
6

私は標準の\bという単語境界を使用していました。しかし、それはドット(。)文字を私が望む方法ではあまり扱っていません。正規表現の単語境界の代替

したがって、次の正規表現:私はcats and dogs don't make cats.dogsを言う文字列を持っている場合

\b(\w+)\b

cats.dogcatsdogsと一致します。

私は場合にのみ、単語全体と一致します単語境界代替必要があります(。)は、ドットが含まれていない

  1. を文字
  2. それが上の少なくとも1つのスペース()文字によってカプセル化されていますそれぞれの側

すべてのアイデア?

P.S.私はあなたがスペースがそれの前と後があることを確実にするために\bの代わりに前後して(?=\s)(?<=\s)を使用して試みることができる、しかし、あなたはまた、開始時であることの可能性を考慮したい場合がありますPHP

+0

"ungreedy"が必要です –

答えて

5

のためにこれを必要としますまたは文字列の末尾(?<=\s|^)(?=\s|$)

とこれは自動的にそれらで.と「言葉」を除外しますが、それとの完全な停止の間にスペースがないので、それはまた、文の末尾に単語を除外します。

+0

ありがとうございます。どんなやり方でも、文の最初と最後に単語を含めることができますか?私はそれを必要としないかもしれませんが、それはちょうど知って良いかもしれません。 –

2

あなたが照合しようとしているのは、配列と文字列関数で簡単に行うことができます。

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

それは時間を節約できますように私は、この方法をお勧めします。 それ以外の場合、良い正規表現の解決策を見つけるのに数時間を費やすことは非常に非生産的です

+0

私は 'preg_replace'関数の最初のステップとして別の正規表現の一部としてこれを必要とします。それで、私は何をする必要があるのか​​はうまくいきません –

+0

あなたが実際に必要とするものを尋ねる方が良いです。正規表現より良い解決策があるかもしれません。 –

関連する問題