【问题标题】:php REGEX match every line after a certain line [duplicate]php REGEX匹配某行之后的每一行[重复]
【发布时间】:2011-03-03 17:13:02
【问题描述】:

可能重复:
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
        )

)

【问题讨论】:

    标签: php regex multiline preg-match-all


    【解决方案1】:

    这可能有用:Pattern Modifiers

    s (PCRE_DOTALL)

    如果设置了这个修饰符,一个点 模式匹配中的元字符 所有字符,包括换行符。 没有它,换行符被排除在外。 这个修饰符相当于 Perl 的 /s 修饰符。负类,例如 [^a] 总是匹配换行符 字符,独立于设置 这个修饰符。

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

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

    【讨论】:

    • 问题是我需要分别匹配这些行,它所做的只是一键返回它们。
    猜你喜欢
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-22
    • 2016-10-08
    • 1970-01-01
    相关资源
    最近更新 更多