PHP 中包含特定单词的字符串的条件

Posted

技术标签:

【中文标题】PHP 中包含特定单词的字符串的条件【英文标题】:Conditions in PHP for string(s) that contain specific words 【发布时间】:2016-10-13 11:07:36 【问题描述】:

这里是我想要应用的 9 不同的字符串 if else 条件(or something better):

1. Automated - Under the Hood: iPhone 6 running ios 9
2. Automated - AU/NZ:  iPhone 6 running iOS 9
3. Automated - DRM: iPhone 6 running iOS 9 
4. Automated - Ads regression: iPhone6 running iOS 9
5. Automated - Ads regression: iPhone 5 running iOS 8 
6. Automated - UI & Functional Regression on iPad 2 running iOS 8
7. Automated - Under the Hood: iPad Air on iOS 8
8. Automated - AU/NZ: iPad Air running iOS 8
9. Automated - DRM iPadAir running iOS 8

每次,我都会得到一个above string,并将其分配给php variableIt is possible that the order of words or position of few words in any string can change。但是某些东西,例如OS, phone type, OS version and test type will not change。根据字符串包含的具体单词,我将进行 REST api 调用。

例如,如果 PHP var 保存第一个字符串,即 if

$test = Automated - Under the Hood: iPhone 6 running iOS 9,然后我会进行#1 rest api 调用。

所以,我认为我应该这样做:

if ($test/string contains "under", "hood", "iPhone 6", "iOS 9") then do #1rest call (that i have command for)

else if ($test/string contains "AU", "NZ", "iPhone 6", "iOS 9") then do #2rest call..
....
else
... for all the above 9 strings. 

到目前为止,我已经在 PHP 中尝试过 .contains()。 Will a switch be a better alternative to this? If yes, an example would be good to have. 否则,在 if-else 条件/正则表达式中做更好的方法。

【问题讨论】:

使用 in_array 函数对所有字符串进行数组检查 ***.com/questions/19445798/… PHP 中的contains() 是什么? @ThomasAyoub:全部完成。 【参考方案1】:

您可以使用具有以下正则表达式的命名捕获组:

-\s*(?<what>.*):.*?(?<device>ip(?:hone|ad(?: ?air)?))\s*(?<model>\d)?.*ios\s*(?<os>\d)

你可以在regex101那里试试

如果你想运行PHP:

$re = "/-\s*(?<what>.*):.*?(?<device>ip(?:hone|ad(?: ?air)?))\s*(?<model>\d)?.*ios\s*(?<os>\d)/mi"; 
$strs = array(
    "1. Automated - Under the Hood: iPhone 6 running iOS 9",
    "2. Automated - AU/NZ:  iPhone 6 running iOS 9",
    "3. Automated - DRM: iPhone 6 running iOS 9 ",
    "4. Automated - Ads regression: iPhone6 running iOS 9",
    "5. Automated - Ads regression: iPhone 5 running iOS 8 ",
    "6. Automated - UI & Functional Regression: on iPad 2 running iOS 8",
    "7. Automated - Under the Hood: iPad Air on iOS 8",
    "8. Automated - AU/NZ: iPad Air running iOS 8",
    "9. Automated - DRM: iPadAir running iOS 8"
); 

foreach($strs as $str)

    preg_match_all($re, $str, $matches);
    echo "What: " . $matches['what'][0] . "\n";
    echo "Device: " . $matches['device'][0] . "\n";
    echo "Device version: " . $matches['model'][0] . "\n";
    echo "Os: " . $matches['os'][0] . "\n";   


然后您可以在if 条件中使用matches['nameOfGroup'][0](例如使用in_array 方法)来执行您要运行的代码。

switch 或大 if/else 条件之间进行选择将取决于您的代码和您想要执行的方法,具体取决于结果。

【讨论】:

以上是关于PHP 中包含特定单词的字符串的条件的主要内容,如果未能解决你的问题,请参考以下文章

jquery验证器避免句子中包含某些单词

用 PHP 检查 URL 是不是有特定的字符串

检查两个字符串是不是在 Python 中包含相同的单词集

在javascript中包含整个字符串中的单词[关闭]

解析“href”标签中包含特定单词的所有链接[重复]

php 字符串(包含)高亮, 将包含的英文单词以空格区分 汉子以每个汉子区分, 替换文字不变 只是颜色变红