如何获取SIP URI的一部分?例如,我有一个URI sip:username@sip.somedomain.com,我只需要得到username,我使用[^sip:](.*)[$@]+表达式,但出现的结果是username@。如何从匹配@中排除?
sip:username@sip.somedomain.com
username
[^sip:](.*)[$@]+
username@
@
yzuktlbb1#
这个应该可以了
(?<=^sip:)(.*)(?=[$@])
yrwegjxp2#
使用lookahead而不是实际匹配@:
^sip:(.*?)(?=@|\$)
要么你使用了一个非常奇怪的正则表达式,要么你的起始字符类是一个错误。[^sip:]匹配的单个字符不是s、i、p或:中的任何一个。我也不确定$字符是什么,因为这不是SIP语法的一部分。
[^sip:]
s
i
p
:
$
7rfyedvj3#
如果lookaheads在你的正则表达式风格中不可用(例如POSIX正则表达式缺少它们),你仍然可以匹配你的正则表达式中你最终不想返回的字符串的部分,如果你使用捕获组并且只抓取其中一些的内容。举个例子^sip:(.*?)[$@]+然后只返回第一个捕获组的内容
^sip:(.*?)[$@]+
3条答案
按热度按时间yzuktlbb1#
这个应该可以了
yrwegjxp2#
使用lookahead而不是实际匹配@:
要么你使用了一个非常奇怪的正则表达式,要么你的起始字符类是一个错误。
[^sip:]
匹配的单个字符不是s
、i
、p
或:
中的任何一个。我也不确定$
字符是什么,因为这不是SIP语法的一部分。7rfyedvj3#
如果lookaheads在你的正则表达式风格中不可用(例如POSIX正则表达式缺少它们),你仍然可以匹配你的正则表达式中你最终不想返回的字符串的部分,如果你使用捕获组并且只抓取其中一些的内容。
举个例子
^sip:(.*?)[$@]+
然后只返回第一个捕获组的内容