簡單但也不容易。下面是使用preg_match_all
和簡單的正則表達式作爲一個例子一些代碼:
// Set the string.
$string = 'Hereissomerandomsentence';
// Set the words array.
$wordsArray = array('some', 'are', 'the');
// Set the regex pattern.
$regex_pattern = '/(?:' . implode('|', $wordsArray) . ')/i';
// Run a regex to get the value between the link tags.
preg_match_all($regex_pattern, $string, $matches);
// Return the results.
echo '<pre>';
print_r($matches);
echo '</pre>';
,這裏是結果:
Array
(
[0] => Array
(
[0] => some
)
)
但是,當我說這是不容易的,缺乏的空間,可能會導致then
與the
等匹配。請記住,電腦無法閱讀。這都是模式邏輯。所以,如果我添加then
和are
的例子字符串是這樣的:
// Set the string.
$string = 'Hereissomerandomsentencethenhereweare';
結果反映then
的the
被拾起:
Array
(
[0] => Array
(
[0] => some
[1] => the
[2] => are
)
)
編輯:樓主問了一個fair-但在評論中的複雜問題:
如果我只想要一個單詞前面有一個單詞還是某個單詞?對於 例如,使用相同的測試字符串,你怎麼能夠改變正則表達式 通過 then
前面時is
,the
時之前只包括some
,並通過are
「我們」先當?因此,對於您的示例, 輸出將僅爲'some'和are
。
你所要求做的是複雜的,但可行使用「Lookarounds」 as explained on this site:
下面是一個使用上面的代碼示例:
$string = 'Hereissomerandomsentencethenhereweare';
// Set the regex pattern.
$regex_pattern = '/(?<=is)some|(?<=then)the|(?<=we)are/i';
// Run a regex to get the value between the link tags.
preg_match_all($regex_pattern, $string, $matches);
// Return the results.
echo '<pre>';
print_r($matches);
echo '</pre>';
,其結果將是爲你期望它:
Array
(
[0] => Array
(
[0] => some
[1] => are
)
)
這裏是該正則表達式的說明/(?<=is)some|(?<=then)the|(?<=we)are/i
:
- 開頭和結尾的斜線(
/
)只是分隔符。
|
字符是簡單的和OR
之間的條件。
- 現在在
OR
條件之間是什麼樣的模式。
現在讓我們以第一個(?<=is)some
爲例。
(?<=[word in here])
是一個「Lookbehind」,意思是:只有在這個詞前面有這個單詞時,纔會捕獲這個單詞。在這種情況下的字是is
。
- 下面的單詞是
some
。
- 所以這一切都增加到:只匹配
some
如果前面有is
。然後the
只有前面有then
。然後are
只有前面有we
。
現在知道這裏有一個模式可能可能會創建一個多維數組,它可以爲單詞設置邏輯,以便僅在被另一個單詞前面檢查時檢查。然後循環創建一堆正則表達式。但這是一項重大任務。
但至少現在你知道這個任務的正則表達式的基本知識!
「不需要遍歷我的數組字符,而是使用字符串本身,並檢查是否在我的數組中找到它的任何子字符串」---爲什麼你認爲'2 + 3'是快於「3 + 2」? – zerkms
可悲的事實是,使用foreach和in_array比使用聲明或匿名函數的array_walk快。你到底在做什麼?試圖找到壞詞? – Ohgodwhy
這個問題似乎是離題,因爲它是關於改善工作代碼,並可能更適合http://CodeReview.stackexchange.com/ –