我在php中使用preg_match()函数来查找字符串内的匹配。
**$var="you can find in telegram.org/";
if(preg_match("(?=(?!(telegram\.org).*)",&var)>0)
{
echo "ok";
}else{
echo "fault";
}**
我想打印错误。
答案 0 :(得分:2)
好像你可以使用
if (preg_match('~^(?!.*telegram\.org/).*telegram\.org~', $var)) {
echo "OK";
}
请参阅regex demo。
此模式将匹配包含telegram.org
但不包含telegram.org/
的任何字符串。
<强>详情
^
- 字符串开头(?!.*telegram\.org/)
- 字符串中的任何位置都不允许telegram.org/
.*
- 除了换行符之外的任何0 +字符telegram\.org
- telegram.org
子字符串。 注意如果您希望将telegram.org
作为整个词匹配,则需要正则表达式:
'~^(?!.*\btelegram\.org/).*\btelegram\.org\b~'
检查\b
,字边界。否则,您可能会考虑其他非正则表达式来匹配字符串。与the one below类似,但是 - 或许更好 - with stripos
,用于不区分大小写的比较。
答案 1 :(得分:1)
我建议不要使用正则表达式。 strpos()
很快,可以很好地完成这项任务。
这是demo,只需要拨打strpos()
两次:
$vars=["you can find in telegram.org/","you can find in telegram.org","telegram.org here"];
$find='telegram.org';
foreach($vars as $var){
if(strpos($var,$find)!==false && strpos($var,$find.'/')===false){
echo "$find found without /\n";
}else{
echo "$find failed\n";
}
}
输出:
telegram.org failed
telegram.org found without /
telegram.org found without /
如果您使用正则表达式,我认为~telegram\.org(?!/)~
可以很好地完成工作。只需检查字符串,看看它后面没有/
。