7

標準の\b単語境界を使用していました。ただし、ドット (.) 文字を希望どおりに処理することはできません。

したがって、次の正規表現:

\b(\w+)\b

という文字列がある場合は、catsanddogsに一致します。cats.dogcats and dogs don't make cats.dogs

次の場合にのみ、単語全体に一致する単語境界の代替が必要です。

  1. ドット (.) 文字が含まれていない
  2. 両側に少なくとも 1 つのスペース ( ) 文字でカプセル化されている

何か案は?!

PS PHPにはこれが必要です

4

2 に答える 2

6

の代わりに(?<=\s)before とafterを使用して、その前後にスペースがあることを確認することもできますが、文字列の先頭または末尾にandがある可能性も考慮したい場合があります。(?=\s)\b(?<=\s|^)(?=\s|$)

これにより、a を含む「単語」が自動的に除外さ.れますが、ピリオドとピリオドの間にスペースがないため、文末の単語も除外されます。

于 2012-12-28T18:57:39.410 に答える
2

一致させようとしているものは、配列関数と文字列関数を使用して簡単に実行できます。

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

時間の節約になるので、この方法をお勧めします。それ以外の場合、適切な正規表現の解決策を見つけるために数時間を無駄にすることは、非常に非生産的です。

于 2012-12-28T19:09:03.297 に答える