正则表达式替换单词

时间:2012-09-23 15:33:10

标签: php regex replace expression

我有一个字符串$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);

1 个答案:

答案 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个小写字符。

编辑:我在最后添加了一个?,以便在字符串中最后一次使用。