我有这样的字符串:
@
String mystr = "test@example.com"
String mystr = test@@@@::example.com;
@
我想先将'@'更改为[code],然后将'@'更改为[/ code]。
在第一个和最后一个'@'之后我们有空格或'\ n'。
此代码对我不起作用:
$text = preg_replace('#[@](.|)(.*?)[@\n]#',"'<pre>$2</pre>'",$text);
答案 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>