如何通过php正则表达式在data-cfemail标记内获取字符串?

时间:2018-07-12 21:21:24

标签: php regex

我想从字符串中获取344747585151010c745359555d581a575b59

[a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="344747585151010c745359555d581a575b59"]

我尝试使用以下PHP进行捕获:

preg_match_all("/<a [^>]*data-cfemail=\"?([^\">]+)\"?>/", $input_lines, $output_array);

2 个答案:

答案 0 :(得分:0)

您的字符串中的符号不​​能少于或大于。试试:

data-cfemail="?([^"\]]+)(?:"|])

演示:https://regex101.com/r/JoImnS/2/

请注意,此正则表达式比可能的要宽松。我认为封装data-cfemail的双引号是可选的,否则可以简化。

答案 1 :(得分:0)

您可以使用data-cfemail上的 positive look-behind ,然后直接匹配紧随其后的任何数字或小写字母:

/(?<=data-cfemail=")[\da-z]+/

打破这一点:

  • (?<=data-cfemail=")-匹配data-cfemail="之后的所有内容
  • [\da-z]-匹配任何数字或小写字母
  • +-匹配一个或多个数字/小写字母

preg_match("/(?<=data-cfemail=")[\da-z]+/", $input_line, $output_array);

返回:

array(1
  0 => 344747585151010c745359555d581a575b59
)

可以在PHPLiveRegex here 上看到它。