我对正则表达式很陌生,并尝试提取字符串中的文本,该字符串以新行开头括号中的值开始,直到括号中的下一个字符串为止。
我的弦:
(1x) cat
dog
(2) ele(4)phant
tiger
(x) fish
bird我要得到:
- "1x" and "cat\r\ndog"
- "2" and "ele(4)phant\r\ntiger"
- "x" and "fish\r\nbird"我的审判官:
(\r\n)*(\((.*?)\))(.*)这让我觉得:
Match 1
Full match 0-8 `(1x) cat`
Group 2. 0-4 `(1x)`
Group 3. 1-3 `1x`
Group 4. 4-8 ` cat`
Match 2
Full match 13-28 `(2) ele(4)phant`
Group 2. 13-16 `(2)`
Group 3. 14-15 `2`
Group 4. 16-28 ` ele(4)phant`
Match 3
Full match 35-44 `(x) fish `
Group 2. 35-38 `(x)`
Group 3. 36-37 `x`
Group 4. 38-44 ` fish `问题是,我的正则表达式似乎停止在线的末尾,所以新线上的字符串(狗,虎,鸟)都不见了。
您知道如何在下一次比赛之前也获得下一行的内容吗?
发布于 2017-11-13 12:54:17
你可以用
'~^\(([^()]*)\)(.*(?:\R(?!\([^()]*\)).*)*)~m'详细信息
^ -行的开始(由于m修饰符,^匹配行的开始而不是整个字符串的开始)\( -a (([^()]*) -第1组:[^()]* - 0+字符,而不是(和) (如果您不想跨行溢出,并且希望在(...)中匹配(,则可以在这里使用.*? )。
\) -a ) char(.*(?:\R(?!\([^()]*\)).*)*) -第2组:.* -行的其余部分(?:\R(?!\([^()]*\)).*)* - 0+序列的\R(?!\([^()]*\)) -行中断后没有跟着(...)子字符串.* -行的其余部分
https://stackoverflow.com/questions/47264773
复制相似问题