【问题标题】:PHP Regex preg_match_allPHP 正则表达式 preg_match_all
【发布时间】:2014-04-30 14:00:30
【问题描述】:

我有一个大文本文件,我需要从中删除某些信息,但我仍在学习正则表达式,需要一些有关搜索字符串语句的帮助。

以下是我尝试提取的数据示例:

"id": "12345"  (good)
"id": "a123"   (bad)

我遇到问题的部分是我想获取第一个示例,它只有数字作为 ID 的值。如果 ID 中有字母,我不想抓住它。身份证号码的长度也不同,但格式一致:

"id": "number_here"

我有以下代码,但它似乎不适用于我想做的事情:

preg_match_all("/\"id\"\:\s\"[0-9]\"/", $input_file) 

【问题讨论】:

  • 这个文本文件有什么特殊的结构吗?看起来可能是 JSON

标签: php regex preg-match-all


【解决方案1】:

你的正则表达式很好(如果反斜杠有点重),除了一个致命缺陷:你只搜索一个数字。

preg_match_all('/"id": "[0-9]+"/', $input_file, $matches);
var_dump($matches);

希望这会有所帮助!

【讨论】:

  • 工作就像一个魅力!非常感谢您!!!我的印象是所有特殊字符都必须转义。
  • @user3569450 嘿,好吧,逃避不需要它的东西当然没有危害,但这样做更具可读性;)
【解决方案2】:
  • 您不需要在 yiur 正则表达式中转义许多字符
  • 对正则表达式使用单引号
  • 确保使用量词+ 匹配"id": 之后的1 个或多个数字

你可以使用:

preg_match_all('/"id" *: *"[0-9]+"/', $input_string, $matches) ;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    • 2014-02-24
    • 2016-08-08
    • 1970-01-01
    相关资源
    最近更新 更多