考虑我的几个输入字符串。
我写过这个正则表达式,它适用于输入字符串1。
(?:([a-zA-Z0-9.://_]*)(/#/(?=([a-zA-Z0-9]{5})/)))
Output:
http://local.app.com/local/frontend/v12/#/,http://local.app.com/local/frontend/v12,/#/,abcde
但是,当我将其扩展为支持输入字符串1,2和3的重复!/.../ 占位符时,它不起作用并且提供空字符串而不是令牌。
(?:([a-zA-Z0-9.://_]*)(/#/(?=([a-zA-Z0-9]{5})/))(!/(?=([a-zA-Z0-9]{5})/))*)
Output:
http://local.app.com/local/frontend/v12/#/,http://local.app.com/local/frontend/v12,/#/,abcde,,
答案 0 :(得分:0)
?=实际上是在?=后指定由你指定的位置定义的位置 它(也)不捕获任何可能与环视规范相匹配的内容(?=)。
尝试
(。+?#(/ [a-zA-Z0-9] {5} /)(!/([a-zA-Z0-9] {5})/)*)
(希望我没有写错字,现在无法测试。)
这应该捕获完整的输入,但是内部的各种捕获使您可以访问捕获的“令牌”。
此外,您还可以为内部的各种捕获命名,以便在匹配中更容易识别它们:
(.+?#(/(?<tokenFirst>[a-zA-Z0-9]{5})/)(!/(?<tokenMore>[a-zA-Z0-9]{5})/)*)
成功