覆盖多行的正则表达式
regex that covers multiple lines
我想从以下示例 txt 中提取数据
START
A: 567 B:345
C: 345 D:485
START
A: 345 B:267
C: 980 D:054
我正在使用此正则表达式,但没有任何积极结果:
$regex = '~'
. '^(?P<header>.*START:.*)$'
//. '^(.*A: \d{3} B: \d{3}.*)$'
//. '(.*C: \d{3} D: \d{3}.*)$'
. '~m'
;
这给了我以下结果:
Array
(
[0] => Array
(
[0] => START:
[header] => START:
[1] => START:
)
[1] => Array
(
[0] => START:
[header] => START:
[1] => START:
)
)
但是一旦我取消注释这些行
. '^(.*A: \d{3} B: \d{3}.*)$'
和
. '(.*C: \d{3} D: \d{3}.*)$'
我没有匹配到!
如何提取这些数据?
我尝试删除行锚点的开头 ^
并将行锚点的结尾 $
更改为 \n
但没有成功
一般
当我有一个数据开始行后跟n个数据行,然后是数据行结束[=45]时如何提取数据=] 后跟 一个或多个空行?
试试这个:
(START)\s+(A:\s+\d+\s+B:\d+)\s+(C:\s+\d+\s+D:\d+)
匹配项:
MATCH 1
1. [0-5] `START`
2. [6-18] `A: 567 B:345`
3. [19-31] `C: 345 D:485`
MATCH 2
1. [34-39] `START`
2. [40-52] `A: 345 B:267`
3. [53-65] `C: 980 D:054`
在使用修饰符 m (MULTILINE
匹配多行字符串时,您必须确保使用 [\r\n]
或更好地使用 \R
.
匹配换行符
对于您的输入,以下正则表达式应该有效:
/^(?<header>START)$\R+^(?<line1>A:\h*\d{3}\h+B:\h*\d{3})$\R+^(?<line2>C:\h*\d{3}\h+D:\h*\d{3})$/m
\R
匹配任何换行符,\h
匹配 PCRE 中的任何水平空格。
我想从以下示例 txt 中提取数据
START
A: 567 B:345
C: 345 D:485
START
A: 345 B:267
C: 980 D:054
我正在使用此正则表达式,但没有任何积极结果:
$regex = '~'
. '^(?P<header>.*START:.*)$'
//. '^(.*A: \d{3} B: \d{3}.*)$'
//. '(.*C: \d{3} D: \d{3}.*)$'
. '~m'
;
这给了我以下结果:
Array
(
[0] => Array
(
[0] => START:
[header] => START:
[1] => START:
)
[1] => Array
(
[0] => START:
[header] => START:
[1] => START:
)
)
但是一旦我取消注释这些行
. '^(.*A: \d{3} B: \d{3}.*)$'
和
. '(.*C: \d{3} D: \d{3}.*)$'
我没有匹配到!
如何提取这些数据?
我尝试删除行锚点的开头 ^
并将行锚点的结尾 $
更改为 \n
但没有成功
一般
当我有一个数据开始行后跟n个数据行,然后是数据行结束[=45]时如何提取数据=] 后跟 一个或多个空行?
试试这个:
(START)\s+(A:\s+\d+\s+B:\d+)\s+(C:\s+\d+\s+D:\d+)
匹配项:
MATCH 1
1. [0-5] `START`
2. [6-18] `A: 567 B:345`
3. [19-31] `C: 345 D:485`
MATCH 2
1. [34-39] `START`
2. [40-52] `A: 345 B:267`
3. [53-65] `C: 980 D:054`
在使用修饰符 m (MULTILINE
匹配多行字符串时,您必须确保使用 [\r\n]
或更好地使用 \R
.
对于您的输入,以下正则表达式应该有效:
/^(?<header>START)$\R+^(?<line1>A:\h*\d{3}\h+B:\h*\d{3})$\R+^(?<line2>C:\h*\d{3}\h+D:\h*\d{3})$/m
\R
匹配任何换行符,\h
匹配 PCRE 中的任何水平空格。