0

ページ全体で同じように見えるすべての文字列を定義された値に置き換える方法を探しています

言語定数を含める他の方法を私に勧めないでください。

このような文字列:

[_家]

[_ニュース]

[_*]の部分ではすべて同じように見えます

ここでの大きな問題は、HTMLページをスキャンし、定義された値を置き換える方法です。

HTMLページを解析する1つの方法は、DOMDocumentを使用してからpre_replace()することです。

しかし、私の主な問題は、置換のためのパターンを書くことです

$pattern = "/[_i]/";
$replacement= custom_lang("/i/");
$doc = new DOMDocument();
$htmlPage = $doc->loadHTML($html);

preg_replace($pattern, $replacement, $htmlPage);
4

2 に答える 2

2

RegExでは、[]は演算子であるため、それらを使用する場合は、それらをエスケープする必要があります。

式に関するその他の問題は、_*ゼロ以上に一致すること_です。_.*それを、 _やその後の他の文字と一致するLikeなどの意味のある一致に置き換える必要があります。だからあなたの完全な表現は、

/\[_.*?\]/

ねえ、なぜ?、あなたは尋ねたくなるかもしれません:それが貪欲でないマッチを実行するという理由です。好き、

[_foo] [_bar]がクエリ文字列の場合、貪欲な一致は1つの一致を返し、式は文字列に対して完全に有効であるため、その全体を返しますが、貪欲でない一致は2つの別々の一致を取得します。(詳細情報

_大文字の後に大文字を付けることで、より収縮する方がよい場合があります。好き、

/\[_[A-Z]+\]/

更新:一致した文字列を使用して置き換えます。そのために、逆参照と呼ばれる概念を使用します。

上記の式を変更して、次のように文字列を括弧で囲むことを検討してください。/\[_([A-Z]+)\]/

これで、preg-replace引数で、を使用してそれらを逆参照することにより、括弧内の式を使用できます$1。つまり、使用できるのは、

preg_replce("/\[_([A-Z]+)\]/e", "my_wonderful_replacer('$1')", $html);

e modifier: 2番目のパラメーターをPHPコードとして扱う必要がありました。(詳細情報

于 2012-08-09T12:45:31.677 に答える
-1

置き換えようとしている完全なキーワードがわかっている場合(たとえば[_HOME])、str_replace()を使用してすべてのインスタンスを置き換えることができます。

正規表現を導入して、このようなことをより複雑にする必要はありません。

于 2012-08-09T12:35:49.780 に答える