正则表达式匹配任何字符串是否与Unicode?

时间:2011-07-07 15:14:16

标签: php regex unicode

我想匹配标题标签之间的任何字符串

$string = "<title>نص عربى English text</title>";

$pattern = '/<title>(regex.here)<\/title>/u';

if (preg_match_all($pattern, $string, $matches, PREG_SET_ORDER)) {
print_r($matches);
} else {
echo 'No matches.';
}    

返回应该是

نص عربى English text

4 个答案:

答案 0 :(得分:2)

尝试

$string = "<title>نص عربى English text</title>";

$pattern = '/<title>([\x{0000}-\xFFFF]*.*?)<\/title>/u';

if (preg_match_all($pattern, $string, $matches, PREG_SET_ORDER)) {
print_r($matches);
} else {
echo 'No matches.';
}    

答案 1 :(得分:2)

如果您的PCRE使用unicode support进行编译,则可以匹配unicode标准中的字母空格。

 <?php
 preg_match_all('|<title>(\p{L}+)</title>|u', $string, ...);

请注意 u -modifier,它启用unicode匹配。

答案 2 :(得分:1)

复制粘贴到文件中,更改匹配表达式以获取标题标记之间的任何内容并打印第一个匹配项:

<?PHP
$string = "<title>ﻦﺻ ﻉﺮﺑﻯ English text</title>";
$pattern = '/<title>(.*)<\/title>/u';
if (preg_match_all($pattern, $string, $matches, PREG_SET_ORDER)) {
    print($matches[0][1]."\n");                                                      
} else {
    echo 'No matches.';
} 
?>

输出:

rasjani@laptop:~$ php unitest.php 
نص عربى English text
rasjani@laptop:~$ 

答案 3 :(得分:0)

(??????)只匹配长度正好为6个字符的内容,并且只匹配“?”。要匹配“任何”字符,请使用“。”并匹配重复的数字使用'。*'

在正则表达式中匹配这样的HTML标签并不容易,所以你应该使用HTML解析器代替。

作为一种近似,你可以做类似的事情 /<title>([^<]*)<\/title>/ 只要您的文字不包含'&lt;'

,这几乎可以正常工作