【问题标题】:Regular Expression with php Error [duplicate]带有php错误的正则表达式[重复]
【发布时间】:2015-11-24 09:11:36
【问题描述】:

我有以下 html 结构:

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

我正在尝试使用 preg_match 函数获取“mi”。 这是我的代码:

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

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

【问题讨论】:

  • 对我来说没问题fiddle
  • 简单:不要。请改用parser

标签: php regex preg-match


【解决方案1】:

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

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

【讨论】:

  • 它也返回一个空数组。
  • 我更新了我的答案(将+移到子模式中),请再试一次。
  • 还是不行。正则表达式是正确的(我的也可以),但它返回我和空数组。
  • 对不起,它有效,谢谢。
  • yw,请考虑接受答案。
【解决方案2】:
$element = '<div data-provincia="mi" data-nazione="it" ecc...>';
$pattern = '/<div[^>]*data-provincia=\"([^\"]+)\"[^>]*>/';
preg_match($pattern,$element,$provincia);
print_r($provincia[1]);

【讨论】:

  • 显示您的完整代码。
【解决方案3】:

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

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

尽可能多地匹配除双引号之外的所有内容(或不匹配)。但请至少考虑使用Parser 来完成这项任务,正则表达式并不是用来处理它的。

【讨论】:

    【解决方案4】:

    它对我来说很好用

    $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";
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多