0

以下を使用して、X.123 などの ID のインスタンスを探しています。

$regex_id   = "/\b[Xx][\.][0-9]{1,4}\b/";
preg_match_all($regex_id, $html, $matches_id, PREG_SET_ORDER);

一致した ID は、保存されたテキストに変換されます。この部分はうまく機能しますが、いくつかの機能を追加する必要があります。[[X.123]] のように、一部の ID は二重括弧で囲まれます。スタンドアロン ID または括弧で囲まれた ID を一致させる必要があります。

スタンドアロン ID はテキスト (例: ) に置き換えられますX.123 >> MyText
括弧付きの ID は画像に置き換えられます (例: [[X.123]] >> <img src='mypic.png'>.

に置き換えないように、これがどのように行われるか注意する必要があり[[X.123]]ます[[MyText]]。Jason McCreary が以下に示したように、2 つの式を単純に並べ替えることができますが、これはおそらく最善の方法ではありません。

これは括弧で囲まれた ID に一致する正しい表現ですか?

\[\[[Xx][\.][\s][0-9]{1,4}\]\]
4

3 に答える 3

4

単純な方法は、2 つのパスを実行することです。

  1. 交換[[X.123]]
  2. 交換X.123

preg_replace()検索/置換パラメーターに配列を使用するための単一の呼び出しでこれを行います。

アップデート

の正規表現は次の[[X.###]]ようになります。

\[\[[Xx]\.\d{1,4}\]\]
于 2012-11-15T19:50:45.237 に答える
0
(\[\[)?[Xx]\.[0-9]{1,4}(\]\])?
于 2012-11-15T19:58:43.593 に答える
0

これは括弧で囲まれた ID に一致する正しい表現ですか?

\[\[[Xx][\.][\s][0-9]{1,4}\]\]

不要な文字が入っています。

\[\[[Xx]\.[0-9]{1,4}\]\]

編集

...これは、ブラケットのみのバージョンと一致します。両方を一致させる必要がある場合:

(?:\[\[)?[Xx]\.[0-9]{1,4}(?:\]\])?

...一致する場合、ブラケットへの後方参照は作成されません。ここで考えられる問題の 1 つは、括弧をどちらか一方で一致させ、両方では一致させないことです。それよりも厳密にする必要がある場合は、LMK。

乾杯

于 2012-11-15T19:54:35.290 に答える