使用PHP和正则表达式查找文本字符串

使用PHP和正则表达式查找文本字符串,php,regex,Php,Regex,这是我第一次在preg_match中使用正则表达式,我对正则表达式没有任何经验。因此,我试图在输入中查找字符串(不区分大小写)def,可能后跟一个字符串。我使用的正则表达式是:(?-I)def?\。 我得到以下错误:警告:preg_match():第11行/var/www/process.php中的未知修饰符“d” 输入时:asdsa saj dasjdkj def ddas 与任何其他输入相同的错误 那我搞砸了什么?有什么简单的解决办法吗 如果这看起来很傻,很抱歉,但我是PHP领域的一个新手。

这是我第一次在preg_match中使用正则表达式,我对正则表达式没有任何经验。因此,我试图在输入中查找字符串(不区分大小写)
def
,可能后跟一个字符串。我使用的正则表达式是:
(?-I)def?\。

我得到以下错误:
警告:preg_match():第11行/var/www/process.php中的未知修饰符“d”

输入时:
asdsa saj dasjdkj def ddas

与任何其他输入相同的错误

那我搞砸了什么?有什么简单的解决办法吗

如果这看起来很傻,很抱歉,但我是PHP领域的一个新手。

您必须在正则表达式中使用。这是正则表达式中的第一个字符,必须是非字母数字(非空白、非反斜杠)字符。因此,在您的示例中,正则表达式解析器将
作为定界字符(括号样式),并认为d是右括号后的修饰符,因为它不存在,所以无法识别

更好的正则表达式是:

/def/i
它将与字符串中的“def”匹配。您试图与
(?-i)
部分匹配什么?在
def
之后有一个
?是
f
可选吗?这是您当前用示例regex告诉regex引擎的内容

编辑: 匹配开头的“Was”或“Will”,后跟空格:

/^(Was|Will) /i

为什么要使用正则表达式搜索文字子字符串?
strstrstr()
似乎是一个更好的方法。@johnysweb-hmm…似乎很合理。谢谢!我在regex网站上看到了这一点,所以我想我把不同的regex规则放在一起搞砸了。如果你详细介绍你想要匹配的规则,我可以更新我的regex建议。现在我不太明白你到底想做什么。好的,我的实际任务是s检查字符串是否以单词“Was”或“Will”开头,后跟空格,并且字符串可以不区分大小写……在我更新的正则表达式中,
^
表示“字符串的开头”,然后是“Was”或“Will”后跟空格。