在汉字前添加'<br/>'

时间:2013-07-14 13:26:23

标签: php regex preg-match

如果中文措辞与普通文本相结合,如何在汉字前添加<br>

<?php

$string = 'Hello World 自立合作社';

/*
this is what I tried:
preg_match('/\\p{Han}/u', $string, $matches);
print_r($matches)
*/

?>

输出

Hello World</br>自立合作社

2 个答案:

答案 0 :(得分:1)

这肯定不是最好的解决方案,但有一种方法是通过[\x00-\x7F]+匹配一串ASCII字符,然后是非ASCII序列(用^取消相同的模式)。它没有专门针对中国人,但由于the varied ranges of Chinese Unicode characters,这很棘手。

$string = 'Hello World 自立合作社';
// Capture ASCII sequence into $1 and non-ASCII into $2
echo preg_replace('/([\x00-\x7F]+)([^\x00-\x7F]+)/', '$1<br/>$2', $string);

// Prints:
// Hello World 
// 自立合作社

http://codepad.viper-7.com/1kqpOx

实际上,这是一个改进版本,专门通过\p{Han}定位中文字符。 $2捕获还包括空格的\s

// This matches any non-Chinese in $1 followed by Chinese (and whitespace) in $2
echo preg_replace('/([^\p{Han}]+)([\p{Han}\s]+)/', '$1<br/>$2', $string);

答案 1 :(得分:1)

我不是中国人,但我希望这会有所帮助。

当您使用php时,您可以将preg_replace与look ahead construct一起使用。 它将用&lt; br&gt;。

替换所有空白字符(中文字符之前)
$string = 'Hello World 自立合作社';
$pattern = "/\\p{Z}(?=\\p{Han})/ui"; // matches a white space before Chinese character. 

$brStr = preg_replace($pattern, "<br>", $string);
echo $brStr;

我不知道\ p {Han}会匹配所有中文字符所以请查看有关unicode字符的更多信息here

May be this one will help too

希望这会有所帮助。祝好运! ;)