REGEXP模式,用于匹配2个不同的符号


REGEXP pattern for matching 2 different symbols

我需要,如果字符串中包含打印"是"的符号.@,则队列符号无关紧要,重要的是字符串中至少会有一次这样的符号,我需要使用regexp来实现这一点。

我写:

if (preg_match("#('@.*'.)|('..*'@)#",$str)) {
    echo "yes";
}

但我怀疑是否可以为这个编写更简单的模式

使用此正则表达式(?=.*'.)(?=.*@).+

(?=.*'.) dot exists
(?=.*@) @ exists
.+ any string

您可以使用前瞻来分离两个条件:

^(?=.*'.)(?=.*@)

不需要启动字符串锚点,但它有助于性能。

也许没有正则表达式会更容易一些。

if(strpos($str, ".") !== false || strpos($str, "@") !== false) {
    echo "yes";
}

那么您就不需要正则表达式了,它可能会快一点。然后只搜索字符串中的字符。