我有一个关于preg_match的问题,如果我尝试取这样的东西:Århuseren by i Danmark意味着Århus是丹麦的一个城市
preg_match( "#<div id=[\"']faktaDiv[\"']>(.*?)</div>#si", $webside, $a2 );
echo $a2;
然后输出将是:
rhuseren by i Danmark意味着 rhus是丹麦的一个城市
我该如何解决这个问题?基本上它需要允许æøå。
答案 0 :(得分:0)
对于正则表达式方法,您需要 u
修饰符。有关PHP修饰符的完整列表,请参阅http://php.net/manual/en/reference.pcre.pattern.modifiers.php,您当前使用的i
和s
是另外两个修饰符。
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始终匹配换行符,而点与换行符不匹配,除非您启用点匹配换行符匹配模式。