将中文字符与正则表达式匹配(php)

时间:2009-10-18 20:14:43

标签: php regex unicode cjk

你能否指出我的正则表达中的错误?

/[\x{4e00}-\x{9fa5}]*[.\s]*\[\/m\][\x{4e00}-\x{9fa5}]/u

我的字符串以中文字符([\x{4e00}-\x{9fa5}])开头,后跟任何字符,以“[/ m]”和另一个中文字符结尾。所以字符串可能看起来像:

我... some text goes here (contains any characters including spaces and new lines)... [/m]我

但不幸的是,我的正则表达式没有按预期工作。

5 个答案:

答案 0 :(得分:1)

看起来您可能希望将第一个'*'替换为'+'以确保您在初始位置至少有一个匹配字符,并且可以使用'\ s'删除字符组并使用'。 “因为那将匹配任何角色。另外,如果这是一个完整的行,我会用'^'开始正则表达式并以'$'结束。

答案 1 :(得分:1)

  1. 如果开头只有一个中文字符,请删除第一个'*'。
  2. 但是你应该保留'[。\ s]',因为'。'不匹配 换行(我认为)。
  3. 一旦完成,请确保问题来自正则表达式,而不是来自php代码。

答案 2 :(得分:1)

用正则表达式(php)匹配汉字

<?php 

# this is our regx /\p{Han}+/u

$string='我... some text goes here (contains any characters including spaces and new lines)... [/m]我'; 

if(preg_match("/\p{Han}+/u", $string)){
echo "chinese here"; 
}

if(preg_match("/\p{Han}+/u", $string)){

#get all chinese characters in one array 
preg_match_all('/\p{Han}+/u',$string,$matches);

print_R($matches[0]);

}
?>

中文在这里

Array (
    [0] => Array
        (
            [0] => 我
            [1] => 我
        )

)

您可以进行foreach并替换所需的字符。

答案 3 :(得分:0)

/[\x{4e00}-\x{9fa5}][.\s]*\[\/m\][\x{4e00}-\x{9fa5}]/um

答案 4 :(得分:0)

[\x{4e00}-\x{9fa5}]+.+\[\/m\][\x{4e00}-\x{9fa5}]

符合您的说明:

[\x{4e00}-\x{9fa5}]+ - &gt; 4E00和9FA5之间的一个或多个字符。

.+ - &gt;一个或多个其他字符

\[\/m\] - &gt; [/ M]

[\x{4e00}-\x{9fa5}] - &gt; 4E00和9FA5之间的一个字符