改变字符串之间的preg_match_all文本

时间:2012-07-17 11:32:17

标签: php regex preg-match preg-match-all

我需要使用preg_match_all获取某些字符串之间的文本。我尝试过使用轮换,但我没有得到正确的信息。我需要的是在工作日字符串之间获取随机文本。从星期五开始,它应该到文本末尾。

我的数据如下:

Monday 1.1.
randomtext
randomtext
Tuesday 2.1.
randomtext
randomtext
Wednesday 3.1
randomtext
randomtext
Thusday 4.1.
randomtext
randomtext
randomtext
Friday 5.1
randomtext
randomtext

我现在拥有的是这个,但是它只捕获周一之后的东西,它应该停在周二然后再做一次:

/(Monday|Tuesday|Wednesday|Thursday|Friday)([\s\S]+)/

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

试试这个,使用m修饰符和^ + $来匹配文字的每一行。

$datas = <<<data
Monday 1.1.
randomtext
randomtext
Tuesday 2.1.
randomtext
randomtext
Wednesday 3.1
randomtext
randomtext
Thusday 4.1.
randomtext
randomtext
randomtext
Friday 5.1
randomtext
randomtext
data;
preg_match_all('#^(?!Monday|Tuesday|Wednesday|Thusday|Friday)\w+$#im',$datas,$matches);
print_r($matches);

答案 1 :(得分:0)

您可以使用preg_split()

$day_pattern = '/([a-z]+?day [\d\.]+\n)/i';
$bits = preg_split(
    $day_pattern,
    $str,
    null,
    PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE
);
if ($bits)
    foreach($bits as $bit)
        echo preg_match($day_pattern, $bit)
            ?
            '<h3>'.$bit.'</h3>'
            :
            '<p>'.$bit.'</p>';

输出

<h3>Monday 1.1.</h3>
<p>randomtext
randomtext</p>
<h3>Tuesday 2.1.</h3>
<p>randomtext
randomtext</p>
<h3>Wednesday 3.1</h3>
<p>randomtext
randomtext</p>
<h3>Thusday 4.1.</h3>
<p>randomtext
randomtext
randomtext</p>
<h3>Friday 5.1</h3>
<p>randomtext
randomtext</p>

答案 2 :(得分:0)

在你的例子中,'随机文本......'不在某些字符串之间,因为它在结尾处缺少字符串,即在星期五之后

Monday 1.1.
randomtext1
randomtext2
Tuesday 2.1.
randomtext3
randomtext4
Wednesday 3.1
randomtext5
randomtext6
Thursday 4.1.
randomtext7
randomtext8
randomtext9
Friday 5.1
randomtext10
randomtext11
Monday

如果文本如上所示,即它总是在工作日字符串之间,则可以使用以下模式。

 (?<=Monday|Tuesday|Wednesday|Thursday|Friday)([\s\S]+?)(?=Monday|Tuesday|Wednesday|Thursday|Friday)