【问题标题】:preg_match expression including white spacepreg_match 表达式,包括空格
【发布时间】:2014-02-06 11:07:42
【问题描述】:

所以我试图解析从外部网页中提取的数字序列。

preg_match('#([0-9]{3}\s[0-9]{3}\s[0-9]{3}){1}#', $element, $match);

虽然回显 $element 显示正确的表达式,但不会返回任何结果:

341 102 408 AAA Bccc

当然,当我在在线正则表达式测试仪上使用上述字符串尝试上述正则表达式时,我得到了预期的结果...... 我在想可能有一个看不见的字符代替了空白,但找不到它。我真的快疯了……

编辑:

奇怪的是,这确实删除了输入字符串的每个空格,除了我要提取的表达式:

$element = preg_replace("/\s/", "", $element);

【问题讨论】:

  • 对输入字符串执行var_dump
  • 你知道preg_match 不返回结果吗?在您的示例中,$match 将是一个包含匹配项的数组
  • 否则您可以从末尾删除 {1}。这是默认设置。
  • 试过 var_dump,我仍然得到空格,还尝试删除 {1} 而没有改变
  • 我知道 preg_match 不会返回结果 :)

标签: php regex preg-match whitespace


【解决方案1】:

试试

preg_match('#([0-9]{3}\s+[0-9]{3}\s+[0-9]{3}){1}#u', $element, $match);

使正则表达式引擎能够识别 Unicode,并允许数字之间有多个空白字符;也许你那里有一些非 ASCII 空格。

也就是说,您可以将其减少到

preg_match('#(?:[0-9]{3}\s+){2}[0-9]{3}#u', $element, $match);

如果匹配成功,你会在$match[0]找到匹配结果。

【讨论】:

  • 完成了这项工作。非常感谢朋友!
猜你喜欢
  • 1970-01-01
  • 2017-12-20
  • 1970-01-01
  • 1970-01-01
  • 2016-08-01
  • 2013-01-12
  • 1970-01-01
  • 2016-11-07
  • 1970-01-01
相关资源
最近更新 更多