2012-04-10 10 views
1

残念なことに、いくつかの奇妙な理由で、正規表現の方法がUTF-8(preg_replace + UTF-8 doesn't work on one server but works on another)で動作しません。正規表現なしでテキスト内の単語の集合を検出する最も効率的な方法

正規表現を使用せずに目標を達成する最も効率的な方法は何ですか?

ただ、単語の次のセットのために、可能な限り明確にする:

猫は空が青い
falseを返します
猫、犬、空が真
のSkyrimはfalseを返します返します

+0

使用しているPHPのバージョンは? –

答えて

1

非常に短い例ですが、これはRegexなしでやっています。

$haystack = "cats"; //"the sky is blue"; // "skyrim"; 
$needles = array("cat", "dog", "sky"); 

$found = false; 
foreach($needles as $needle) 
    if(strpos(" $haystack ", " $needle ") !== false) { 
     $found = true; 
     break; 
    } 


echo $found ? "A needle was found." : "A needle was not found."; 
+1

万が一['substr_count'](http://php.net/manual/en/function.substr-count.php)を呼びたいと思いますか? ;-) – Basti

+1

また、 '$ heystack'に' $ needle 'が含まれていて、出現量ではなく、Liorはinteresstedなので、 'strpos'がこのソリューションではより良い性能を発揮すると思います。 http://stackoverflow.com/a/3875258/1220835 – Basti

+0

@Basti 'strpos!== false'、いいですか? – iambriansreed

1

私の最初の考えは、スペース上のテキストを爆発させて、あなたの言葉が結果の配列に存在するかどうかを確認することです。もちろん、いくつかの句読点があなたの配列に漏れているかもしれません。

単語のstrposを確認することもできます。見つかった場合は、次の文字が文字かどうかをテストします。それが手紙であれば、あなたは単語のサブテキストを見つけたことを知り、この発見を破棄します。もちろん

// Test online at http://writecodeonline.com/php/ 

$aWords = array("I", "cat", "sky", "dog"); 
$aFound = array(); 
$sSentence = "I have a cat. I don't have cats. I like the sky, but not skyrim."; 

foreach ($aWords as $word) { 
    $pos = strpos($sSentence, $word); 
    // If found, the position will be greater than or equal to 0 
    if (!($pos >= 0)) continue; 
    $nextChar = substr($sSentence , ($pos + strlen($word)), 1); 
    // If found, ensure it is not a substring 
    if (ctype_alpha($nextChar)) continue; 
     $aFound[] = $word; 
} 

print_r($aFound); // Array ([0] => I [1] => cat [2] => sky) 

より良い解決策は、これらのソリューションは、パターン・シークのようになりますようどこにも近いほど効率的であるように、あなたが、正規表現を使用することはできません理由を判断することです。

+0

これは、非常に大きなテキストを扱うとき、実際には最も効率的な方法ですか? – Lior

+3

@Lior最も効率的なことは、正規表現をどのように動作させるかを理解することです。これはそれほど効率的ではありません。 – Sampson

+0

私は私の人生のためにそれを理解することができません...正直なところ、なぜそれが動作していないと、もう残念ながら私は別のソリューションを使用する必要があります待つことができません。 – Lior

0

あなたは、単に言葉は、あなたが(文字列を印刷する代わりに、内部の文字列と変数を印刷する場合)変数に文字列を格納し、「中」を使用することができ、文字列である場合に見つけようとしている場合。例:

a = 'The sky is blue' 
The in a 
True 
+0

これはPHPコードのようには見えません... – user13500

関連する問題