0

元の正規表現が機能するようになりましたが、非常に似ているため、これを機能させることができると考えました。しかし、私はできません。

このコードは、ユーザーのブラウザで JS が有効になっているかどうかに応じて、リンクが JavaScript または HTML に置き換えられるテンプレート システムに使用されています。

文字列の例は次のようになります。 help{:footerlink}{::helpFooter}

「ヘルプ」は、リンク自体に表示されるテキストです。「footerLink」は、リンクに適用する必要がある CSS クラスです 「helpFooter」は、リンクに適用する必要がある CSS ID です

これが私が使用しようとしているコードです:

$string = 'help{:footerlink}{::helpFooter}';
$classIDExp = '/([a-z0-9]+)\{:([a-z0-9]+)\}\{::([a-z0-9]+)\}/i';

$display = preg_replace($idexp, "$1", $string);
$class = preg_replace($idexp, "$2", $string);
$cssID = preg_replace($idexp, "$3", $string);

$curLink = 'Display Text: ' . $display . '<br />' .
           'Class: ' . $class . '<br />CSS ID: ' . $cssID;

echo $curLink;

このコードは次を出力します。

Display Text: help{:footerlink}{::helpFooter}
Class: help{:footerlink}{::helpFooter}
CSS ID: help{:footerlink}{::helpFooter}

適切な出力は次のようになります。

Display Text: help
Class: footerlink
CSS ID: helpFooter

リンク ID は正常に取得されますが、表示テキスト、css クラス、および css ID が見つかりません。コロン (:) もエスケープしようとしましたが、それでも同じ出力が表示されます。

前にも言ったように、私は正規表現の専門家とはほど遠いので、どんな助けも大歓迎です。:(

4

1 に答える 1

2
if (preg_match($classIDExp, $string, $match)) {
  $display = $match[1];
  $class = $match[2];
  $cssID = $match[3];
}
于 2013-01-24T01:49:46.250 に答える