我需要使用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]+)/
有什么想法吗?
答案 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)