0

@テキストブロックから記号を削除しようとしています。問題は、特定の場合 (行の先頭にある場合、@記号をそのままにしておく必要がある場合) です。

RegExパターンを使用して成功し.\@ましたが、@記号が削除されると、その前の文字も削除されます。

目標:記号が行の最初の文字でない限り、すべて@の記号を削除します。@

<?php

function cleanFile($text)
{
    $pattern = '/.\@/';
    $replacement = '%40';
    $val =  preg_replace($pattern, $replacement, $text);
    $text = $val;
    return $text;
};

$text  = ' Test: test@test.com'."\n";
$text .= '@Test: Leave the leading at sign alone'."\n";
$text .= '@Test: test@test.com'."\n";
$valResult = cleanFile($text);
echo $valResult;

?>

出力:

Test: tes%40test.com
@Test: Leave the leading at sign alone
@Test: tes%40test.com
4

3 に答える 3

2

負の後読みを使用して正規表現でこれを行うことができ/(?<!^)@/mます: (行頭(または修飾子をスキップした場合は文字列の先頭) が先行しない@記号)。m

正規表現 101 デモ

コード内:

<?php
    $string = "Test: test@test.com\n@Test: Leave the leading at sign alone\n@Test: test@test.com;";
    $string = preg_replace("/(?<!^)@/m", "%40", $string);
    var_dump($string);
?>

以下を出力します。

string(84) "Test: test%40test.com
@Test: Leave the leading at sign alone
@Test: test%40test.com;"

コードパッドのデモ

于 2013-08-20T15:52:13.703 に答える