1

私が取り組んでいるWebサイトの1つに動的リンクシステムを構築しているため、次のようなものを配置するだけで{_LINK_20_}、ユーザーがjavascriptを有効または無効にしているかどうかに応じて、onclickイベントまたはhref属性を動的に入力できます.

唯一の問題は、最初はループを使用してドキュメントを調べていたことですが、連続していないリンク ID を使用して検出できるようにするには、正規表現の方がはるかにうまく機能することに気付きました。

OOP バックエンドに実装する前に、サンプル ページでこれをテストしているだけなので、サンプル コードは次のとおりです。

$results = array();
$string = 'asdfasdf {_LINK_2_} asdf {_LINK_1_}{_LINK_3_} asdf{_LINK_8_}';
$exp = '/{_LINK_<0-9>+_}/';
$find = preg_match($exp, $string, $results);

ただし、 で出力すると、配列$resultsには結果がありませんprint_r()。私は正規表現構文の初心者なので、お手柔らかにお願いします。:)

私が実際にやろうとしているのは、一致したテキストから番号を保存するだけでpreg_replace()、正規表現の結果をループして、必要に応じて各リンクを置き換えることができるようにすることですstr_replace().

私もそのpreg_match_all()機能を試しましたが、どちらもうまくいきませんでした。よろしくお願いします。正規表現が苦手ですみません!

4

1 に答える 1

2

次の正規表現を試してください。

$exp = '/{_LINK_[0-9]+_}/'

preg_match_all を使用します。

文字クラスは、山かっこ ('<>') の代わりに角かっこ ('[]') で実装されます。正しいブラケットを使用するだけで、正規表現が機能します。

本当に数値だけを保存したい場合は、次の正規表現を使用できます。

$exp = '/(?<={_LINK_)[0-9]+(?=_})/'

RegExr で表示するには、ここをクリックしてください。これは、他の正規表現の後ろまたは前にあるものについて、幅ゼロのアサーション (文字自体ではなく、文字間で一致することを意味します) である後読みと先読みを使用して機能します。

こちらの ideone.comでご覧ください。

于 2013-01-23T23:03:59.620 に答える