2013-02-02 53 views
0

我想匹配字符串中的字母序列。例如,如果我有字母T B E,我想匹配所有以字母T開頭並至少包含一次字母B和E的字符串。第二個字母必須出現在第三個字母之前,並且字母之間可能有無數個字符。在正則表達式中匹配字符序列

這就是字母T B E會匹配字符串 表,麻煩和可怕但不是Teb。

我試圖通過使用

$A = 'T'; 
$B = 'B'; 
$C = 'E'; 

$matches = preg_grep('/^'.$A.'.+'.$B.'.+'.$C.'/', $words); 

其中詞語是包含單詞列表的陣列在PHP的代碼本。用我的方式算法的工作原理,但我無法找到$ A $ B或$ C之間沒有字母的單詞。

我如何使用正則表達式來解決這個問題?

+1

'Terrible'不應該那麼匹配。 * e發生在b * – Anirudha

+0

之前我想在這種情況下匹配Terrible。重要的是e在b之後至少出現過一次。它之前是否發生並不重要。 – ahemberg

回答

1

您無法在$ A $ B或$ C之間找不到字母的原因是因爲您使用的是.+,它試圖匹配$ A $ B或$ C之間的至少1個字符。

使用.*代替.+

+0

你也應該使正則表達式不區分大小寫,比如Table('/^T [^ E] * B. * E $/i') – flec

+0

@flec很好的結果... – Anirudha

+0

謝謝!它的工作原理就是我現在希望使用的方式。* – ahemberg