我有一些文字,必须检查它是否有效。
fddfgdfgfdg这里的短语第一次
sdafdsafdsa
sadfsadf
sadfdsaf
这里的短语第二
我必须在本文中检查正确的顺序。 Word FIRST必须在第二个单词之前的文本中。我们只知道这两个词,不知道其余的文字。所以“第一个任何文本第二” - 有效,“第二个任何文本第一” - 无效。
我写了一个正则表达式/^.*?\n*?first.*?|\n*?second.*?\n*?$/mg
,但在任何序列中找到了单词。
答案 0 :(得分:1)
/^.*?\n*?first.*?|\n*?second.*?\n*?$/mg
正则表达式将分别与first
和second
匹配,而不考虑订单,因为该模式包含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!";
}
如果first
和second
是完整的字母数字字词,请附上字边界:\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
}