【问题标题】:Obtain specific data with preg_match_all使用 preg_match_all 获取特定数据
【发布时间】:2015-01-28 03:42:07
【问题描述】:

我有不同的文本格式不正确,因此我需要一个可以与所有文本一起使用并从中返回一些特定元素(文本)的模式。假设我有这段文字:

"AL TEST232    KW     12*/13*/17 TEST kw16TEST123 kw 15*"

我希望我的 preg_match_all() 返回如下内容:

Array
(
    [0] => Array
        (
            [0] => AL TEST232
            [1] => 12/13/17
        )
    [1] => Array
        (
            [0] => TEST
            [1] => 16
        )
    [2] => Array
        (
            [0] => TEST123
            [1] => 15
        )
)

这可以通过单一模式实现吗?

【问题讨论】:

  • 以上文本中什么是固定的,什么是动态的?
  • @anubhava 基本上有一些模式是:(sometext)(kw)(number)。第一部分可能由不同的单词和数字组成。第二部分是“kw”或“KW”。第三部分应该是一个简单的数字(例如:12)或一组数字除以斜线(例如:12/13/14)。第三部分也可能包含星号字符。

标签: php regex preg-match-all


【解决方案1】:

你可以使用:

preg_match_all('~(\w[\s\w]*?\w)\s*kw\s*([\d/*]+)~', $input, $matches);

RegEx Demo

【讨论】:

  • 太棒了。最后一件事,当星号字符紧跟在第三部分的数字后面时,是否可以排除星号字符?
  • 好的,但这只有在我想排除最后一个 * 时才有效,如果你检查我的问题,你会发现星号字符也出现在其他地方。是否仍然可以使用一种模式排除它,还是应该分两个不同的步骤来排除它?
  • 对不起,我想我不清楚......基本上我想隐藏/排除第一场比赛中的*,当然还有kw之后的数字在所有其他比赛中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-02
  • 2021-10-29
  • 2019-09-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多