正则表达式可选的递归模式

时间:2014-11-21 15:22:40

标签: regex

我不知道如何捕捉字符串中的可选模式。

要解析此字符串: Dalvik/1.6.0 (Linux; U; Android 4.4.4; Nexus 5 Build/KTU84P)

我使用的模式正是我所需要的:

/^([^\/\s]*)\/([^\s]*)(\s\(([^()]*|\([^()]*\)*)\))?/

# returns
# 1.    Dalvik
# 2.    1.6.0
# 3.    (Linux; U; Android 4.4.4; Nexus 5 Build/KTU84P)
# 4.    Linux; U; Android 4.4.4; Nexus 5 Build/KTU84P

但是这个字符串可以多次出现第一个模式,例如: Bonobo/1.0.3; Multipass/1.5.2; Dalvik/1.6.0 (Linux; U; Android 4.4.4; Nexus 5 Build/KTU84P)

我想得到的是:

# 1.    Bonobo
# 3.    1.0.3
# 4.    Multipass
# 5.    1.5.2
# 6.    Dalvik
# 7.    1.6.0
# 8.    (Linux; U; Android 4.4.4; Nexus 5 Build/KTU84P)
# 9.    Linux; U; Android 4.4.4; Nexus 5 Build/KTU84P

但经过多次尝试,我无法弄明白。

有什么想法吗?

非常感谢。

1 个答案:

答案 0 :(得分:0)

您需要对重复的字符串使用\G锚点(即,由相同模式匹配的字符串)。

\G\s*([^\/\s]*)\/([^\s;]*);?(\s\(([^()]*|\([^()]*\)*)\))?

DEMO