关于preg_match的困惑

时间:2016-07-02 22:34:49

标签: php regex preg-match

所以我试图检查$ oneAya是否在字符串“هوالملكالقدوس”中,但每当我尝试下面的代码时,它会打印“找不到”..我做错了什么?

$oneAya = "هُوَ";
if(preg_match($oneAya,"هُوَ الْمَلِكُ الْقُدُّوسُ")) {
    echo 'found';
} else {
    echo 'not found';
}

2 个答案:

答案 0 :(得分:1)

首先,你的正则表达式没有做好彻底准备:你没有把分隔符。

$oneAya = "/هُوَ/";
if(preg_match($oneAya,"هُوَ الْمَلِكُ الْقُدُّوسُ")) {
    echo 'found';
} else {
    echo 'not found';
}

其次,如果你的PCRE是用UTF-8编译的,那么你很好,但preg_match()在解决你的问题方面做得很多,只需你mb_strpos()

if (mb_strpos("هُوَ الْمَلِكُ الْقُدُّوسُ", "هُوَ") !== false) {
    echo 'Found.';
}

答案 1 :(得分:1)

您需要分隔正则表达式,并使用Unicode修饰符:

$oneAya = '/هُوَ/u';

没有分隔符,正则表达式引擎不知道如何解析它。如果要匹配ASCII字符范围之外的任何内容,则需要Unicode修饰符。