正则表达式:给定一个多行字符串,如何匹配位于每行开头的指定字符串之后包含的文本?
regex: given a multiline string, how to match the text included after a specified string positioned at the beginning of each line?
鉴于此多行文本:
abc aaa
bbb abc ccc
abc ddd eee
fff abc
我想匹配每行开头的 abc
单词 作为第一个匹配组 ,其余文本 之前next abc
定位在行首。
所以,这是预期的结果匹配:
Match 1
Full match `abc aaa
bbb abc ccc`
Group 1. `abc`
Group 2. ` aaa
bbb abc ccc`
Match 2
Full match `abc ddd eee
fff abc`
Group 1. `abc`
Group 2. ` ddd eee
fff abc`
我试过这个正则表达式(带有多行选项):
/^(abc)([\w\s]+)/gm
但是结果是错误的,因为它总共占用了文本:
Match 1
Full match `abc aaa
bbb abc ccc
abc ddd eee
fff abc`
Group 1. `abc`
Group 2. ` aaa
bbb abc ccc
abc ddd eee
fff abc`
如何更正我的正则表达式以获得预期的结果?
注意单词 "abc" 也可以与字符串的其余部分 "internal segment" 进行比较。
提前致谢。
使用
/^(abc\b)(.*(?:\r?\n(?!abc\b).*)*)/gm
详情:
^
- 行首
(abc\b)
- 一个完整的单词abc
(如果你不需要一个完整的单词,请删除\b
)
(.*(?:\r?\n(?!abc\b).*)*)
- 第 2 组捕获
.*
- 以 abc
开头的行的其余部分
(?:\r?\n(?!abc\b).*)*
- 0+ 个序列:
\r?\n(?!abc\b)
- 换行符后面没有跟 abc
.*
- 当前行的剩余部分。
鉴于此多行文本:
abc aaa
bbb abc ccc
abc ddd eee
fff abc
我想匹配每行开头的 abc
单词 作为第一个匹配组 ,其余文本 之前next abc
定位在行首。
所以,这是预期的结果匹配:
Match 1
Full match `abc aaa
bbb abc ccc`
Group 1. `abc`
Group 2. ` aaa
bbb abc ccc`
Match 2
Full match `abc ddd eee
fff abc`
Group 1. `abc`
Group 2. ` ddd eee
fff abc`
我试过这个正则表达式(带有多行选项):
/^(abc)([\w\s]+)/gm
但是结果是错误的,因为它总共占用了文本:
Match 1
Full match `abc aaa
bbb abc ccc
abc ddd eee
fff abc`
Group 1. `abc`
Group 2. ` aaa
bbb abc ccc
abc ddd eee
fff abc`
如何更正我的正则表达式以获得预期的结果?
注意单词 "abc" 也可以与字符串的其余部分 "internal segment" 进行比较。
提前致谢。
使用
/^(abc\b)(.*(?:\r?\n(?!abc\b).*)*)/gm
详情:
^
- 行首(abc\b)
- 一个完整的单词abc
(如果你不需要一个完整的单词,请删除\b
)(.*(?:\r?\n(?!abc\b).*)*)
- 第 2 组捕获.*
- 以abc
开头的行的其余部分
(?:\r?\n(?!abc\b).*)*
- 0+ 个序列:\r?\n(?!abc\b)
- 换行符后面没有跟abc
.*
- 当前行的剩余部分。