【问题标题】:Regex string split into an array正则表达式字符串拆分为数组
【发布时间】:2015-08-14 15:48:13
【问题描述】:

我需要按照几个规则拆分字符串,但是,我对正则表达式或 PHP 数组不是很有经验。 所以字符串是这样的:

A N K U N F T   11.08.15
*** N ***
11.08.15  xxx  xxx  X3 2830  14:25   17:50
18.08.15  xxx  xxx  X3 2830  18:40  F882129  dsdsaidsaia  F882129  xxxyxyagydaysd

我需要把这个字符串放到一个数组中:

date1 ->  11.08.15

date2-> 18.08.15

fnr1 -> X3 2830

h1 - > 17:50

fnr2 -> X3 2830

h2 -> 18:40

n1 -> dsdsaidsaia

n2 -> xxxyxyagydaysd

我在 regex101 做了以下事情:

对于 fnr:

(\w{2}\s\d{4})

日期:

(\n\s\d{2}\W\d{2}\W\d{2})

对于 h:

(\s{2}\d{2}\:\d{2}\n) 

但是,我不知道如何区分 date1 与 date2、fnr1 与 fnr2 以及 h1 与。

我已经在 php 中尝试过这个日期,但它没有输出我想要的日期:

$re = "/(\n\s\d{2}\W\d{2}\W\d{2})/"; 
$str = "";//the string
preg_match($re, $str, $matches);
print_r($matches);

有人可以帮帮我吗?提前谢谢!

【问题讨论】:

  • 这个数据有什么一致性?有点像制表符分隔的数据...\t 是一个制表符 \h 是一个水平空格。
  • 这不是代码编写服务器。你展示了你到目前为止所做的工作,我们(也许)会尝试帮助修复它。
  • 把它放在你的问题中,它可能会被从保留中删除。我可以回答这个问题,但他阻止了我

标签: php arrays regex string


【解决方案1】:

这将完全符合您的要求:

^((?:\d{2}\.?){3}).*?(\w{2}\s\d{4}).*?(\d{2}:\d{2})(?:.*?(\b[a-z]+\b).*?(\b[a-z]+\b))?$

它将每一行的所有内容分成不同的捕获组。如果您有问题,请告诉我。

注意:确保有标志gm,以便^$ 使每一行开始和结束;不是整个字符串。

Regex101

【讨论】:

  • @MiguelSousa 你不能真的指望我在评论中读到它,是吗?请编辑您的问题,并让我知道您已对其进行了编辑。
  • @MiguelSousa preg_match 不是全局匹配。 preg_match_all 是。它现在给出了想要的结果。
  • @MiguelSousa 回答了你的问题吗?
猜你喜欢
  • 2016-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多