正则表达式匹配3个连续大写字母

时间:2014-09-10 17:04:01

标签: php regex

我有以下文字:

  

74 avenue Emile Counor

     

Bat B2 Appt B104

我想替换所有换行符,仅当以下3个字母不是3个大写字母

例如,上一个示例应该变为:

  

74 avenue Emile Counor Bat B2 Appt B104

但是

  

74 avenue Emile Counor

     

BAT B2 Appt B104

应该留下来。

我通过正则表达式工具尝试了很多解决方案,但无法满足我想要的效果。

这是我到目前为止所尝试的

preg_replace("/\n([^A-Z]{3})/", " $1", $str)

3 个答案:

答案 0 :(得分:5)

如果你想否定LF之后的内容,那就是使用否定的lookahead

$str = preg_replace("/\n(?![A-Z]{3})/", " ", $str);

请注意,前瞻只是一项测试,其内容并未出现在匹配结果中。

答案 1 :(得分:3)

搜索正则表达式:

'/\n(?![A-Z]{3})/'

的更换:

" "

RegEx Demo

<强>代码:

$str = "74 avenue Emile Counor\nBat B2 Appt B104";     
$result = preg_replace('/\n(?![A-Z]{3})/', ' ', $str);

答案 2 :(得分:0)

我会用一种简单的方法。

查找:

 (\n[A-Z]{3})|\n  

替换:

 $1

此外,此处没有简单方法来保留/添加额外的空格格式字符 我的意思是它可以通过回调来完成,但添加盲" "是错误的。