我在多行上捕捉重复模式时遇到问题。 我相信这是一项简单的任务,但我似乎无法让它发挥作用!
Check this example:Users of (.*\s*)
Users of 85838NAVSIM_F: (Total of 2 licenses issued; Total of 2 licenses in use)
----- ends here!
"85838NAVSIM_F" v1.000, vendor: adskflex
floating license
1 RESERVATION for PROJECT 1 (SRV02/27000)
----- should catch to here (and repeat on next)!
Users of 67600NAVMAN_F: (Total of 2 licenses issued; Total of 2 licenses in use)
"67600NAVMAN_F" v1.000, vendor: adskflex
floating license
1 RESERVATION for PROJECT 2 (SRV02/27000)
为什么不仅仅.*
(任何字符,包括新行?多次)足以捕获多行?如何调整正则表达式以使其按预期工作?
谢谢!
答案 0 :(得分:0)
我建议使用一个驯化的贪婪令牌并依赖[^]
或[\s\S]
来匹配任何字符,因为在JS正则表达式中,由于缺少DOTALL / {{而无法重新定义点行为1}}修饰符。
使用
s
请参阅regex demo
<强>详情
/^Users of (?:(?!^Users of )[\s\S])*/gim
- 该行的开头(使用^
修饰符,m
匹配字符串和行的开头)^
- 文字字符序列Users of
- 一个与任何字符匹配的调和贪婪令牌(请参阅(?:(?!^Users of )[\s\S])*
= [\s\S]
)零次或多次(请参阅[^]
)未启动{{1行开头的子字符串相同的展开式正则表达式看起来像
*
这里,调和的贪婪令牌被展开为
Users of
- /^Users of .*(?:\r?\n(?!Users of ).*)*/gim
.*
- 零次或多次出现:
Users of
- 换行符(可以替换为(?:\r?\n(?!Users of ).*)*
以匹配任何常见的样式换行符...)\r?\n
- (?:\r\n?|\n)
substring (?!Users of )
- 其余部分。