我有以下字符串值:
https://<host_name>/path/object.svc/path1/path2|https://<host_name>/path/xyz.svc/path3/path4.
object.svc
始终固定在字符串中,但部分xyz.svc
是可变的。例如,在第二种情况下,字符串值将是
https://<host_name>/path/object.svc/path1/path2|https://<host_name>/path/abcd.svc/path3/path4.
我想要一个我可以使用的通用正则表达式模式,以便我想跳过object.svc
并且只选择xyz.svc
,abcd.svc
等。基本上我想要的正则表达式查找不是.svc
的所有object.svc
。
有人建议如何做到这一点吗?
答案 0 :(得分:2)
如果您不使用Javascript,可以使用向后看 (?<!object)
,例如:\w+(?<!object)\.svc
如果仍然希望匹配包含“sobject”之类的对象的单词,例如,您可以将 \b
添加到后面的表达式中,如:\w+(?<!\bobject)\.svc
,这将是强制仅匹配单词object.svc
请注意 \w
会匹配[a-zA-Z0-9_],如果仅排除数字或排除_
,则可能需要更改\ w与[a-zA-Z0-9]
正确地突出显示并由 @AlanMoore注释:
前瞻也会起作用:\b(?!object\.svc\b)\w+\.svc\b
。但是,正如您所说,我们无法知道\w+
是否正确,这意味着\b
可能也不正确。最好使用周围的斜杠来锚定匹配项,并使用捕获组来检索它:/((?!object\.svc/)[^/]+\.svc)/