【问题标题】:Get array of multiple substrings preg_match_all获取多个子字符串的数组 preg_match_all
【发布时间】:2017-02-07 01:10:44
【问题描述】:

我必须迭代 300 个文件并将字符串从一列更改为 excel 中的 4 列。我知道在 reg-ex 中有一种方法可以做到这一点,但我想不通……我知道preg_match 可以命名返回的匹配项.. 但我尝试使用 regex101.com 来弄清楚如何获得我正在寻找的返回结果..

我有这个字符串..

Rev 1: blah blah blah blah blah blah 1/1/2017 BLAH

我必须把它放入一个看起来像这样的数组中......

$results = array(
    "rev" => "Rev 1",
    "text" => "blah blah blah blah blah blah",
    "date" => "1/1/2017"
    "name" => "BLAH"
)

我面临的问题是,我不知道如何在一次 preg_match 调用中获得多个匹配项以返回所需的方式。我尝试在谷歌上搜索一些方法来做到这一点,但结果是空的.

我有一些正则表达式可以分别匹配每个字符串.. 但不是一次全部匹配。

\d+\/\d+\/\d+ \(?[A-z]+\)? 匹配 datename 周围有或没有 ()

^([Rr][Ee][Vv] \d+:) 匹配 rev

我不知道在revdate 之间获取text 的方法,所以我没有正则表达式...

【问题讨论】:

  • 没有什么是万无一失的。如果文本中出现看起来像日期的内容怎么办?
  • 当我将文本从 excel 注释复制到新标签时,我亲自检查了所有 300 多张纸并检查了所有内容。所以我知道没有这样的事情。如果有的话,我会一次检查它们并仔细检查,因为当我运行这个脚本时,它会将它们保存到一个新的目录中,而不是覆盖原始文件。但是是的,你是对的,对其他人来说这可能行不通。

标签: php regex preg-match


【解决方案1】:

你真的很接近(这里警告:我假设你所有的字符串都是相同的格式)

^([Rr][Ee][Vv] \d+:)(.*)\d+\/\d+\/\d+(.*)?

(.*) 可让您捕获组之间的内容。你应该把任何你想捕获的东西放在括号内。

您可以在此处查看它的运行情况https://regex101.com/r/8GKgWl/1

【讨论】:

  • 啊哈,看到(.*)是缺少的链接,我知道有办法,哈哈谢谢!
  • 由于某种原因返回 false....regex101.com/r/8GKgWl/3 在那里工作正常
猜你喜欢
  • 1970-01-01
  • 2018-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-28
相关资源
最近更新 更多