问题
I need to search a string for a specific word and have the match be a variable. I have a specific list of words in an array:
$names = array ("Blue", "Gold", "White", "Purple", "Green", "Teal", "Purple", "Red");
$drag = "Glowing looks to be +Blue.";
$match = "+Blue";
echo $match
+Blue
What I need to do is search $drag with the $names and find matches with an option + or - character and have $match become the result.
回答1:
Build a regular expression by joining the terms of the array with |, and adding an optional [-+] at the beginning:
$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);
Output:
string(5) "+Blue"
If you want to insure that you match only +Blue and not +Bluebell, you can add word boundary matches, \b, to the beginning/end of the regex.
If you want to find all instances of all words, use preg_match_all instead.
回答2:
Yes, you can if you use prey_match and some regex logic.
// 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>';
The output is:
Array
(
[0] => +Blue
[1] => Blue
)
来源:https://stackoverflow.com/questions/20930558/php-search-string-for-a-specific-word-array-and-match-with-an-optional-or