preg_match和file_get_contents以及æøå

时间:2016-01-14 22:25:20

标签: php regex preg-match file-get-contents

我有一个关于preg_match的问题,如果我尝试取这样的东西:Århuseren by i Danmark意味着Århus是丹麦的一个城市

preg_match( "#<div id=[\"']faktaDiv[\"']>(.*?)</div>#si", $webside, $a2 );

echo $a2;

然后输出将是:

  

rhuseren by i Danmark意味着 rhus是丹麦的一个城市

我该如何解决这个问题?基本上它需要允许æøå。

2 个答案:

答案 0 :(得分:0)

对于正则表达式方法,您需要u修饰符。有关PHP修饰符的完整列表,请参阅http://php.net/manual/en/reference.pcre.pattern.modifiers.php,您当前使用的is是另外两个修饰符。

preg_match( "#<div id=[\"']faktaDiv[\"']>(.*?)</div>#siu", $webside, $a2 );

看起来您正在解析HTML,所以我使用domdocument来解析该字符串。

$doc = new DOMDocument();
$doc->loadHTML('<div id="faktaDiv">Test Stuff</div>');
$divs = $doc->getElementsByTagName('div');
foreach($divs as $div) {
    if($div->getAttribute('id') == 'faktaDiv') {
         echo $div->nodeValue;
    }
}

要拉title,你应该使用这样的解析器。

$doc = new DOMDocument();
$doc->loadHTML('<title>Test Stuff</title>');
$title = $doc->getElementsByTagName('title')->item(0)->nodeValue;
echo $title;

据我所知,每页只应有一个title个页面。如果不是这种情况,请取消->item(0)->nodeValue并循环遍历数组。

PHP演示:https://eval.in/502432

答案 1 :(得分:0)

您可以使用\X匹配任何UTF-8字符(如用于ansi字符的点),特定代码点,一系列代码点或unicode类别:

http://www.regular-expressions.info/unicode.html

要回答您的问题,我要说用(.*?)替换(\X*?)就足够了。

  

在Perl,PCRE,PHP和Ruby 2.0中,匹配单个字形,无论是编码为单个代码点,还是使用组合标记作为多个代码点,都很容易:只需使用\ X.您可以考虑\ X点的Unicode版本。但有一点不同:\ X始终匹配换行符,而点与换行符不匹配,除非您启用点匹配换行符匹配模式。