PHP preg-match-all正则表达式



我想在PHP中使用preg_match_all将它们捕获到各自的组中。

  1. 章节、节或页
  2. 指定章节、节或页的编号(如果有字母则为字母)。如果它们之间有一个空格,则应考虑

请记住,字符串中的项数可能是动态的,正则表达式应该适用于下面的所有示例:

  1. Ch1和Sect2b
  2. 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)

最新更新