PHPは交換してください、しかし、代替文字列を交換してください

StackOverflow https://stackoverflow.com/questions/1072476

  •  21-08-2019
  •  | 
  •  

質問

さて、ここで私がやろうとしているものです:私は基本的にフルマークダウンクラスを使用して価値がない値下げ実施のの小さなのサブセット、何を開発するためにPHPを使用しようとしています

私は基本的に必要str_replaceを行うが、開閉HTMLタグを処理するように、針のすべての出現のための文字列を置換交互ます。

たとえば、イタリック*この*のようなアスタリスクのペアであり、コードブロックがthis` `のようなバッククォートで囲まれている。

Iは、開口HTMLタグが対応する文字の組の最初の発生を交換する必要がある、と終了タグと第二

これを行う方法上の任意のアイデア?私は正規表現のいくつかの並べ替えが関与することでしょう...

考え出し
役に立ちましたか?

解決

カウントが偶数で、アスタリスクをヒットした場合、

個人的に、私はカウンターで*または\の各発生をループをいただきたい、と数に基づいて、適切なHTMLタグで文字を置き換える(例えば、それを置き換えますそれは奇妙だ場合<em>で、その後</em>、など)と交換します。

しかし、あなたはあなたが唯一のマークアップのカップルシンプルな種類をサポートする必要があることを確信している場合は、それぞれの正規表現は、最も簡単な解決策になるかもしれません。アスタリスクのためにこのような何か、例えば(未テスト):

preg_replace('/\*([^*]+)\*/', '<em>\\1</em>', $text);

やバックスラッシュのために何か似ています。

他のヒント

あなたが探していることは、より一般的に、ステートマシンまたはレクサー/パーサによって処理されます。

これは醜いですが、それは動作します。キャッチ:一度に一つのパターン・タイプに

$input = "Here's some \\italic\\ text and even \\some more\\ wheee";

$output = preg_replace_callback( "/\\\/", 'replacer', $input );

echo $output;

function replacer( $matches )
{
    static $toggle = 0;
    if ( $toggle )
    {
        $toggle = 0;
        return "</em>";
    }
    $toggle = 1;
    return "<em>";
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top