私は正規表現でマークアップを一致させようと無視して試合:正規表現:2つのブラケット
1. thats an [External Link](www.external.com), as you can see
2. thats an [Internal Link](wiki.com/Internal Link), as you can see
を生じるはずである
1. thats an [www.external.com External Link], as you can see
2. thats an [[Internal Link]], as you can see
はそれの両方がこのpreg_replacesで正常に動作:
1. $line = preg_replace("/(\[)(.*?)()(.*)(\])/", "[$4]($2)", $line);
2. $line = preg_replace("/(\[\[)(.*)(\]\])/", "[$2](wiki.com/$2)", $line);
を
しかし、彼らはお互いに干渉しているので、他のものが醜い結果を返した後に置き換えます。だから私は試合の一つを無視しようとしています。私はこの1つで最初の正規表現を交換しようとした:
([^\[]{0,})(\[)([^\[]{1,})()(.*)(])
[
ではないの後と前に一つだけ[
と文字がある場合、それは確認する必要があります。しかし、そのはまだ[]
内[Internal Link]
に一致するが、それは次の2つのケースを処理するためのコールバック関数で条件付き交換を定義するパターンを構築することができpreg_replace_callback
と完全に
'preg_replace_callback'を使用して1回のパスで実行します。あるいは、もっと簡単に、すでに作られたパーサを見つけてください。 –
私はそれがコールバックとどのように動作するのか理解していませんか?パターンを無視して処理しないようにしたいからです。そして、はい、markup-> markdown libを探していますが、まだ見つかりませんでした。そして、実際に私が必要とするような多くの魔法ではない、私はすでに自分で最も多くをしました。 – Asara