php REGEX匹配某一行后的每一行

时间:2011-03-03 17:13:02

标签: php regex multiline preg-match-all

  

可能重复:
  PHP REGEX preg_math_all every line after a particular line

我想要一个匹配特定行之后每一行的模式 - 我可以依赖的唯一常量是如果标题在那里我知道我想要跟随行。如果我最终获得的线条数量超出了我的要求并不重要,因为我只会选择第一条线,而不是我需要的线条。

SURGICAL/MEDICAL HISTORY <--Header to indicate the beginning of my list
HISTORY 1 <--line1 to be matched
HISTORY 2 <--line2 to be matched
HISTORY 3 <--line3 to be matched
.
.

我没有发布文本的真实样本,因为它无关紧要 - 模式必须灵活,并且出于其他特殊原因。我总是在正则表达式中出现这样的问题。这就是我所拥有的:

$ptn = "/SURGICAL\/MEDICAL HISTORY\s*(^(.+)$)+/m";

但这只匹配第一行。谢谢!

编辑:我需要在数组中分隔所有匹配的行:

Array
(
    [0] => Array
        (
            [0] => SURGICAL/MEDICAL HISTORY
HISTORY 1
HISTORY 2
        )

    [1] => Array
        (
            [0] => HISTORY 1
            [1] => HISTORY 2
        )

)

1 个答案:

答案 0 :(得分:2)

这可能很有用:Pattern Modifiers

  

s(PCRE_DOTALL)

     
    

如果设置了此修改器,则为点     模式中的元字符匹配     所有字符,包括换行符。     没有它,排除了换行符。     这个修饰符相当于Perl     / s修饰符。一个负面的类,如     [^ a]始终匹配换行符     字符,与设置无关     这个修饰语。

  

你的最终正则表达式应如下所示(未经测试):

$ptn = "/SURGICAL\/MEDICAL HISTORY\s*$(.*)/ms";