我试图捕捉这样的结构:
1:1 wefeff qwefejä qwefjk
dfjdf 10:2 jdskjdksdjö
12:1 qwe qwe: qwertyå
我想匹配数字之间的所有内容,后跟冒号,然后是另一组数字。所以预期的输出是:
match 1 = 1:1 wefeff qwefejä qwefjk dfjdf
match 2 = 10:2 jdskjdksdjö
match 3 = 12:1 qwe qwe: qwertyå
以下是我的尝试:
\d+\:\d+.+
但如果有两行的单词字符,则会失败。
我正在使用基于javascript的正则表达式引擎。
答案 0 :(得分:1)
您可以使用基于tempered greedy token的正则表达式:
/\d+:\d+(?:(?!\d+:\d)[\s\S])*/g
\d+:\d+
部分将匹配一个或多个数字,一个冒号,一个或多个数字,(?:(?!\d+:\d)[\s\S])*
将匹配任何char,零或更多次出现,不会启动一个或多个序列数字后面跟冒号和数字。请参阅this regex demo。
由于调和贪婪令牌是一种消耗资源的构造,您可以unroll it进入更有效的模式,如
/\d+:\d+\D*(?:\d(?!\d*:\d)\D*)*/g
现在,()
变成了一个匹配字符串线性的模式:
\D*
- 0+非数字符号(?:
- 开始匹配零个或多个序列的非捕获组:
\d
- 一个数字...... (?!\d*:\d)
- 未跟随0+位数,:
和数字\D*
- 0+非数字符号)*
- 非捕获组的结束。答案 1 :(得分:0)
你可以使用或不使用ñ-Ñ,但你应该这样做
\d+?:\d+? [a-zñA-ZÑ ]*
编辑:
如果要包含断行,可以将\ n或\ r添加到集合
\d+?:\d+? [a-zñA-ZÑ\n ]*
\d+?:\d+? [a-zñA-ZÑ\r ]*
试一试!也在https://regex101.com/
进行了测试更多字符: ^ [a-zA-Z0-9!@#\ $%\ ^ \& *)(+ = ._-] + $