我有这样的字符串:
@
String mystr = "test@example.com"
String mystr = test@@@@::example.com;
@
我想将第一个“@”更改为 [code],然后将最后一个“@”更改为 [/code]。
在第一个和最后一个'@'之后我们有空格或'\n'。
这段代码对我不起作用:
$text = preg_replace('#[@](.|)(.*?)[@\n]#',"'<pre>$2</pre>'",$text);
我有这样的字符串:
@
String mystr = "test@example.com"
String mystr = test@@@@::example.com;
@
我想将第一个“@”更改为 [code],然后将最后一个“@”更改为 [/code]。
在第一个和最后一个'@'之后我们有空格或'\n'。
这段代码对我不起作用:
$text = preg_replace('#[@](.|)(.*?)[@\n]#',"'<pre>$2</pre>'",$text);
我想说最简单的方法是非正则表达式:
$splitted = str_split($your_string, "@");
$first = array_shift($splitted);
$last = array_pop($splitted);
$result = "[code]" . implode("@", $splitted) . "[/code]";
或类似的东西,无论你看到什么最好。
如果您想考虑主题字符串中的换行符,您需要添加以将“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>