2013-09-20 3 views
0

У меня есть массив подходящих слов:регулярных выражений проверить, если массив содержит несколько слов

$search = array("lorem","dolor","sit"); 

и массив искать в:

$results= array(
     "Lorem ipsum dolor sit amet, consectetur", 
     "Ut enim ad minim veniam, quis nostrud exercitation" 
     "Duis aute irure dolor in reprehenderit in voluptate velit esse" 
     "Excepteur sint occaecat cupidatat non proident" 
    ); 

Есть регулярное выражение, чтобы вернуться истинный где два соответствующих слов совпадают?

+0

Почему это должно быть регулярное выражение? – meda

+0

, потому что мне нужно использовать его в xpath compare –

+0

xpath compare() делает строку для сравнения строк, не так ли? – Anthony

ответ

0

Вы можете создать регулярное выражение для поиска этого

$regex = '/(' . implode('|', $search) . ')/i'; 

который будет:

/(lorem|dolor|sit)/i 

/i делает это без корпуса.

Затем вы можете использовать возвращаемое значение preg_match_all(), чтобы увидеть количество совпадающих слов.

1

Вы можете использовать границу слова \b в своем регулярном выражении.

Граница слова - это позиция между \ w и \ W (неглавным символом) или в начале или конце строки, если она начинается или заканчивается (соответственно) символом слова.

Так что, может быть что-то вроде этого ..

foreach ($results as $result) { 
    $pattern = "/\b(" . implode('|', $search) . ")\b/i"; 
    $found = preg_match_all($pattern, $result, $matches); 

    if ($found) { 
    print_r($matches[0]); 
    } 
} 

Или вы могли бы избавиться от поискового массива и просто использовать его как регулярное выражение:

foreach ($results as $result) { 
    $found = preg_match_all("/\b(?:lorem|dolor|sit)\b/i", $result, $matches); 
    if ($found) { 
    print_r($matches[0]); 
    } 
} 

Выход:

Array 
(
    [0] => Lorem 
    [1] => dolor 
    [2] => sit 
) 
Array 
(
    [0] => dolor 
) 
Смежные вопросы