0

私はこのような文字列を持っています:

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

最初の '@' を [code] に変更し、2 番目の最後の '@' を [/code] に変更します。

最初と最後の '@' の後には、スペースまたは '\n' があります。

このコードは私には機能しません:

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

2 に答える 2

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 に答える
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 に答える