我想在PHP中使用preg_match_all将它们捕获到各自的组中。
- 章节、节或页
- 指定章节、节或页的编号(如果有字母则为字母)。如果它们之间有一个空格,则应考虑
请记住,字符串中的项数可能是动态的,正则表达式应该适用于下面的所有示例:
- Ch1和Sect2b
- ch4 x blahunwantedtext和section 5y和section 6z和Ch7或Ch8
这是我到目前为止想出来的:
<?php
$str = 'Ch 1 a and Sect 2b and Pg3';
preg_match_all ('/([a-z]+)([s]?[0-9]+)([s]?[a-z]*)([s]?and*[s]?)/is', $str, $matches);
Array
(
[0] => Array
(
[0] => Ch 1 a and
[1] => Sect 2b and
)
[1] => Array
(
[0] => Ch
[1] => Sect
)
[2] => Array
(
[0] => 1
[1] => 2
)
[3] => Array
(
[0] => a
[1] => b
)
[4] => Array
(
[0] => and
[1] => and
)
)
我无法匹配数组中字符串(Pg3)的最后部分。
预期的结果应该是:
Array
(
[0] => Array
(
[0] => Ch 1 a and
[1] => Sect 2b and
[2] => Pg3
)
[1] => Array
(
[0] => Ch
[1] => Sect
[2] => Pg
)
[2] => Array
(
[0] => 1
[1] => 2
[2] => 3
)
[3] => Array
(
[0] => a
[1] => b
[2] =>
)
[4] => Array
(
[0] => and
[1] => and
[2] =>
)
)
这个正则表达式应该工作/(ch|sect|pg)s*(d)s*([a-z]?b)s*(and|or)?/i
:
$str = 'Ch 1 a and Sect 2b and Pg3';
preg_match_all('/(ch|sect|pg)s*(d)s*([a-z]?b)s*(and|or)?/i', $str, $matches);
array (size=5)
0 =>
array (size=3)
0 => string 'Ch 1 a and' (length=10)
1 => string 'Sect 2b and' (length=11)
2 => string 'Pg3' (length=3)
1 =>
array (size=3)
0 => string 'Ch' (length=2)
1 => string 'Sect' (length=4)
2 => string 'Pg' (length=2)
2 =>
array (size=3)
0 => string '1' (length=1)
1 => string '2' (length=1)
2 => string '3' (length=1)
3 =>
array (size=3)
0 => string 'a' (length=1)
1 => string 'b' (length=1)
2 => string '' (length=0)
4 =>
array (size=3)
0 => string 'and' (length=3)
1 => string 'and' (length=3)
2 => string '' (length=0)