我有一个字符串$str
定义如下:
$str = "Horosho byt' tihoney 23 Sen 2012 14:00 | 20:20 | 00:30 24 Sen 2012 09:30 | 14:00 Obitel' zla: Vozmezdie 3D 23 Sen 2012 16:10 | 20:25 | 22:25 Osobo opasny 23 Sen 2012 18:00 24 Sen 2012 11:30 | 18:00 25 Sen 2012 11:30 | 18:00 26 Sen 2012 11:30 | 18:00 Patrul' 23 Sen 2012 20:10 | 22:20 24 Sen 2012 11:50 | 20:10"
我希望用<br>
标签包围这些字词;例如,Horosho byt' tihoney
将变为<br>Horosho byt' tihoney<br>
,而Obitel' zla: Vozmezdie 3D
将变为<br>Obitel' zla: Vozmezdie 3D<br>
。
到目前为止我所拥有的:
preg_replace("/(?<=\s)([\p{L}*?]{3,})(?=\s[0-9]{2}\s)/u", "<br>$1<br>", $str);
答案 0 :(得分:0)
好的,所以这是我的解决方案。这不完全是你指定的,但它解决了你的问题。日期和时间似乎比名称更常规(因为后者可能包含数字,撇号和冒号......以及谁知道更多)。所以我想,在<br/>
中包含日期和时间一样好(当然你必须在开头添加另一个<br/>
并从最后删除一个,但这不是问题,我想。所以这里是正则表达式,它找到日期和时间的字符串并将它们(及其周围的空格)包含在<br/>
中:
$newStr = preg_replace("/(\s\d{1,2}\s[A-Z][a-z][a-z]\s\d{4}|\s\d{2}:\d{2}|\s\|)+\s?/", "<br/>$0<br/>", $str);
我假设您的日期当天可能有1位或2位数(从示例字符串中无法分辨),并且您的所有月份都是1个大写字母和2个小写字符。
编辑:我在最后添加了一个?
,以便在字符串中最后一次使用。