【问题标题】:php regex catch text afterphp正则表达式捕获文本后
【发布时间】:2017-03-17 09:45:45
【问题描述】:

我有这个正则表达式:

$pattern = '!(>+\h+)?(.*)schrieb:(.*?)!iUgs';

匹配

Daniel schrieb:
> I think 

这行得通。但是当我有多个匹配目标时

Daniel schrieb:
> I think 

Hi,
Jessi schrieb:
> I do
test

第二场比赛将在最后一个接球组结束,但它应该再次匹配(但整个后续,包括第二场比赛应该在最后一个接球组)。这可能吗?

我要抓拍

1: Daniel

2: 
> I think 

Hi,
Jessi schrieb:
> I do
test

然后

1: Jesse

2:
> I do
test

见:https://regex101.com/r/64Rr52/2

【问题讨论】:

  • 或者更好——你期望的最终结果是什么?
  • 喜欢这里:regex101.com/r/64Rr52/3 但它应该像以前一样再次匹配“Jessi schrieb”等
  • 尝试$pattern = '~(?m)^.*schrieb:\R\h*>.*(?:\R(?!\R).*)*~i' 获取双换行符之间的块。
  • 这个都行不通,因为我想把"schrieb"后面的东西都抓起来,所以需要抓两次,可能不行
  • 我更新了我的问题来说明它

标签: php regex


【解决方案1】:

你可以在 PHP 中使用这个正则表达式:

~^(.*?)\h+schrieb:(?=((?s).*\z))~im

(?=((?s).*\z)) 是一个前瞻,它执行前瞻断言并将schrieb: 之后的文本分组到文件末尾。

RegEx Demo

【讨论】:

  • 太棒了,你拯救了我的一天!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-11
相关资源
最近更新 更多