preg_replace更改文本以'@'开头,以'@ \ n'结尾

时间:2012-11-16 11:42:32

标签: php preg-replace

我有这样的字符串:

@
String mystr = "test@example.com"
String mystr = test@@@@::example.com;
@

我想先将'@'更改为[code],然后将'@'更改为[/ code]。

在第一个和最后一个'@'之后我们有空格或'\ n'。

此代码对我不起作用:

$text = preg_replace('#[@](.|)(.*?)[@\n]#',"'<pre>$2</pre>'",$text);

2 个答案:

答案 0 :(得分:0)

我认为最简单的方法是非正则表达方式:

$splitted = str_split($your_string, "@");
$first = array_shift($splitted);
$last = array_pop($splitted);

$result = "[code]" . implode("@", $splitted) . "[/code]";

或类似的东西,无论你看得最清楚。

答案 1 :(得分:0)

如果你想考虑主题字符串中的换行符,你需要添加“m”modifier到正则表达式,也可能是's'。

这个代码片段可以满足您的要求:

<?php
$test = <<<END
@
String mystr = "test@example.com"
String mystr = test@@@@::example.com;
@

END;

echo preg_replace('/@\s(.*)@\s/sm', "<code>\n$1</code>\n", $test);
?>

输出:

<code>
String mystr = "test@example.com"
String mystr = test@@@@::example.com;
</code>

如果输入字符串中有多对“@”,则正则表达式应包含“U”修饰符:

<?php
$test = <<<END
@
String mystr = "test@example.com"
String mystr = test@@@@::example.com;
@

@
String mystr2 = "test2@example.com"
String mystr2 = test@@@@2::example.com;
@

END;

echo preg_replace('/@\s(.*)@\s/smU', "<code>\n$1</code>\n", $test);
?>

输出:

<code>
String mystr = "test@example.com"
String mystr = test@@@@::example.com;
</code>

<code>
String mystr2 = "test2@example.com"
String mystr2 = test@@@@2::example.com;
</code>