使用php Error的正则表达式

时间:2015-11-24 09:11:37

标签: php regex preg-match

我有以下html结构:

<div data-provincia="mi" data-nazione="it" ecc...

我正试图用preg_match函数取“mi”。 这是我的代码:

$pattern = '/data-provincia=*"[a-zA-Z]*"/';
preg_match($pattern,$element,$provincia);

我认为代码是正确的,但它与任何东西都不匹配。 哪里我错了? 感谢。

4 个答案:

答案 0 :(得分:1)

您可能希望在括号中的字符类旁边使用量词+(1或更多),并删除第一个星号。还为您添加了一个子模式,以准确获取您想要的部分。试一试:

$pattern = '/data-provincia="([a-zA-Z]+)"/';
preg_match($pattern,$element,$provincia);
echo $provincia[1];

答案 1 :(得分:1)

$element = '<div data-provincia="mi" data-nazione="it" ecc...>';
$pattern = '/<div[^>]*data-provincia=\"([^\"]+)\"[^>]*>/';
preg_match($pattern,$element,$provincia);
print_r($provincia[1]);

答案 2 :(得分:1)

除了我的评论,对于这个简单的属性,您可以使用以下正则表达式:

$regex = '/data-provincia="([^"]*)/i';
preg_match($regex,$element,$matches);
echo $matches[1];

基本上尽可能多地匹配除双引号之外的所有内容(或者没有)。但至少请考虑使用Parser来执行此任务,正则表达式并不意味着要处理它。

答案 3 :(得分:1)

它对我来说很好

$element = '<div data-provincia="mi" data-nazione="it"></div>';
$pattern = '/data-provincia=*"[a-zA-Z]*"/';
$matches= array();
preg_match($pattern,$element, $matches);
if (!empty($matches)) {
    foreach ($matches as $eachOne) {
        //code to remove unwanted
        $text = trim(preg_replace('/^data-provincia\=/', '', $eachOne), '""');
        echo " $eachOne; $text";
    }

}