PHP – Строка поиска для определенного массива слов и совпадение с необязательным + или –

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

$names = array ("Blue", "Gold", "White", "Purple", "Green", "Teal", "Purple", "Red"); $drag = "Glowing looks to be +Blue."; $match = "+Blue"; echo $match +Blue 

Мне нужно выполнить поиск $drag с $names и найти совпадения с символом опции + или - и получить результат $match .

Создайте регулярное выражение, соединяя члены массива с | , и добавление необязательного [-+] в начале:

 $names = array ("Blue", "Gold", "White", "Purple", "Green", "Teal", "Purple", "Red"); $drag = "Glowing looks to be +Blue."; $pattern = '/[-+]?(' . join($names, '|') . ')/'; $matches = array(); preg_match($pattern, $drag, $matches); $matches = $matches[0]; var_dump($matches); 

Вывод:

 string(5) "+Blue" 

Если вы хотите, чтобы вы соответствовали только +Blue а не +Bluebell , вы можете добавить совпадения слов границы, \b , в начало / конец регулярного выражения.

Если вы хотите найти все экземпляры всех слов, вместо этого используйте preg_match_all .

Да, вы можете, если используете prey_match и некоторую логику регулярных выражений.

 // Set the names array. $names_array = array ("Blue", "Gold", "White", "Purple", "Green", "Teal", "Purple", "Red"); // Set the $drag variable. $drag = "Glowing looks to be +Blue."; // Implode the names array. $names = implode('|', $names_array); // Set the regex. $regex = '/[-+]?(' . $names . ')/'; // Run the regex with preg_match. preg_match($regex, $drag, $matches); // Dump the matches. echo '<pre>'; print_r($matches); echo '</pre>'; 

Выход:

 Array ( [0] => +Blue [1] => Blue )