检查单词序列regexp

时间:2016-11-07 08:39:40

标签: php regex

我有一些文字,必须检查它是否有效。

  

fddfgdfgfdg这里的短语第一次

     

sdafdsafdsa

     

sadfsadf

     

sadfdsaf

     

这里的短语第二

我必须在本文中检查正确的顺序。 Word FIRST必须在第二个单词之前的文本中。我们只知道这两个词,不知道其余的文字。所以“第一个任何文本第二” - 有效,“第二个任何文本第一” - 无效。

我写了一个正则表达式/^.*?\n*?first.*?|\n*?second.*?\n*?$/mg,但在任何序列中找到了单词。

2 个答案:

答案 0 :(得分:1)

/^.*?\n*?first.*?|\n*?second.*?\n*?$/mg正则表达式将分别与firstsecond匹配,而不考虑订单,因为该模式包含2个备选项,1)^.*?\n*?first.*?匹配行的开头,任何0 +字符,最多0个新行,然后first和2)\n*?second.*?\n*?$匹配0 +换行符,second然后任意0+字符到可选换行符和行尾。实际上,模式肯定有点偏。

您可以使用以下正则表达式:

'~first.*second~s'

请参阅regex demo

preg_match一起使用。由于first修饰符,该模式会在second之后的某个位置找到first,然后s。{/ p>

一个有效的替代展开的正则表达式为'~first[^s]*(?:s(?!econd)[^s]*)*second~',它会在first之后找到second

请参阅PHP demo

$re = '~first.*second~s';
$str = "fddfgdfgfdg  phrase here first\nsdafdsafdsa\nsadfsadf\nsadfdsaf\nphrase here second";
if (preg_match($re, $str, $matches)) {
    echo "Valid!";
}

如果firstsecond是完整的字母数字字词,请附上字边界:\bfirst\b\bsecond\b

答案 1 :(得分:1)

您可以使用strpos来检查字词。

if (strpos($string, '**first**') !== false && strpos($string, '**second**') !== false && strpos($string, '**first**') < strpos($string, '**second**')) {
    // String contains both words, first before the second
}