Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正则表达式:匹配段落中的内容_Php_Regex - Fatal编程技术网

Php 正则表达式:匹配段落中的内容

Php 正则表达式:匹配段落中的内容,php,regex,Php,Regex,我想匹配A和C的值,但前提是它们在同一段落内 A:one C:foo A:two B:rofl, some rubbish ::: A:three B:lol C:bar 现在我正在使用 /A:([a-z]*).*?C:([a-z]*)/s 但这给了我“两个”和“酒吧”,它们不属于一起。如何排除我的/*?/?中的空行,您必须禁止使用双换行符。如果您的发动机允许lookaheads: /^A:([a-z]*)(?:(?!(?:\r?\n){2,}).)*^C:([a-z]*)/sm 这将

我想匹配A和C的值,但前提是它们在同一段落内

A:one
C:foo

A:two
B:rofl, some rubbish :::

A:three
B:lol
C:bar
现在我正在使用

/A:([a-z]*).*?C:([a-z]*)/s

但这给了我“两个”和“酒吧”,它们不属于一起。如何排除我的/*?/?

中的空行,您必须禁止使用双换行符。如果您的发动机允许lookaheads:

/^A:([a-z]*)(?:(?!(?:\r?\n){2,}).)*^C:([a-z]*)/sm
这将适用于Windows/UNIX新品,但不适用于Mac。这也将确保A和C位于一行的开头(注意
m
修饰符)。

这对我来说很有用:

/A:([a-z]*)\v*.*\v?C:([a-z]*)\v*/m

基本上启用换行符(删除。包括换行符),然后专门说明您希望在模式中使用的换行符(
\v
)。

+1表示标题,我喜欢单词
thingies
。如果超过3行,它就会失败。这个问题没有提到超过3行的内容。这并不能完全回答我的问题,但我最终选择了这种事先将段落拆分的方法+1.
$str=<<<A
A:one
C:foo

A:two
B:rofl, some rubbish :::

A:three
B:lol
C:bar
A;

$s = explode("\n\n",$str);
foreach($s as $k){
    if(strpos($k,"A:") !==FALSE && strpos($k,"C:") !==FALSE){
        $a = array_filter ( ( preg_split("/([A-Z]):|\n+/sm",$k) ) );
        print_r($a);
    }
}
$ php test.php
Array
(
    [1] => one
    [3] => foo
)
Array
(
    [1] => three
    [3] => lol
    [5] => bar
)