我有一个字符串:
tel:+13172221234;foo=1234;bar=000-000-000;wombat=mydomain.com
请注意,该字符串始终以tel:+{{some-number}}
开头。我想要捕获,以便我有以下内容:
+13172221234
foo
1234
bar
000-000-000
wombat
mydomain.com
我拥有的是: ([^?=&;]+)=([^;]*)
,它返回三个匹配项,每个匹配项都有一个变量和一个值(即foo / 1234)。但是我似乎无法捕捉到前面的数字。我认为只需将tel:(\w+)
放在前面即可,但它不起作用。
https://regex101.com/r/cM2pQ5/2
任何人都可以提供帮助吗?也许我应该做两个单独的正则表达式?
答案 0 :(得分:4)
您可以使用这个基于前瞻性的正则表达式:
([^:?=&;]+)(?=[=;])(?:=([^;]*))?
RegEx分手:
( # Start of capture group #1
[^:?=&;]+ # Match 1 or more char of anything but ? or = or & or ;
) # End of capture group #1
(?= # Start of positive lookahead
[=;] # to assert next position is either = or ;
) # End of positive lookahead
(?: # Start of "optional" non-capturing group
= # match literal =
( # Start of capture group #2
[^;]* # match 0 or more of any char that is not a ;
) # End of capture group #2
)? # Start of non-capturing group. ? in the end makes it optional
答案 1 :(得分:2)
您可以面对或=
或:
作为键/值分隔符,我建议您这样做:
([^?=&;]+)(=|:)([^;]*)
答案 2 :(得分:1)
我只想匹配这个:
[^;=]+
答案 3 :(得分:1)
这是另一种方式:(regex101)
^tel:([^;]+)|;([^=]+)=([^;]+)
这有两个部分 - 第一部分仅匹配字符串的开头,第二部分匹配其余的键值对。我假设你的字符串以tel: