0

我有这样的字符串:

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

我想将第一个“@”更改为 [code],然后将最后一个“@”更改为 [/code]。

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

这段代码对我不起作用:

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

2 回答 2

0

我想说最简单的方法是非正则表达式:

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

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

或类似的东西,无论你看到什么最好。

于 2012-11-16T11:45:56.460 回答
0

如果您想考虑主题字符串中的换行符,您需要添加以将“m”修饰符添加到正则表达式,也可能添加“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>
于 2012-11-16T12:32:01.893 回答