2

我有以下字符串:

{!ex=track_created_f}track_created_f:[现在/DAY-3MONTHS/DAY TO NOW/DAY]

我想匹配/提取track_created_fNOW/DAY-3MONTHS/DAY TO NOW/DAY。{!ex=track_created_f} 可能始终存在也可能不存在,因此正则表达式不应依赖这部分。

但是,我需要匹配的是第二个 track_created_f(而不是 track_created_f,它是 !ex=track_created_f 的一部分)。

到目前为止,我得到的是以下内容(请参阅此链接以进行实时预览):

[^.*(\w+)\:\[(.*)?\]$]

但是,这只是给了我:

Array
(
    [0] => {!ex=track_created_f}track_created_f:[NOW/DAY-3MONTHS/DAY TO NOW/DAY]
    [2] => f
    [2] => NOW/DAY-3MONTHS/DAY TO NOW/DAY
)

我无法真正掌握的是如何使用正则表达式仅匹配我想要匹配的字符串部分,并且只返回该部分。就像现在一样,(0) 整个字符串与 (1) track_created_f的不太好的匹配和 (2) NOW/DAY-3MONTHS/DAY TO NOW/DAY的匹配一起返回。

我一直试图通过阅读文档来解决这个问题,但我不确定我是否做对了——尤其是可选的“?” 我输入的子句。这是匹配字符串子集的正确方法吗?

4

2 回答 2

3

[^.*(\w+)\:\[(.*)?\]$]是一个错误的正则表达式。您实际上是将整个正则表达式放在正则表达式字符类中。

以下正则表达式就足够了

/(\w+):\[([^\]]+)/
于 2013-09-19T06:35:11.040 回答
0
^(?:{\!ex=\w+}|)(.*):\[(.*)?\]$

这将使该{!ex=track_created_f}部分成为可选的。

见:http ://www.phpliveregex.com/p/1gc

于 2013-09-19T06:34:44.770 回答