-1

私が働いている会社から、CMS から Web ページにモーダル ボックスを配置する機能を提供するように依頼されましたが、HTML を入力したくありません。私の人生では正規表現を理解できないので、取得できません。

入力するコードのレイアウトは次のとおりです。

++modal++
Some paragraph text.

Another paragraph.
++endmodal++

段落はすでにマークダウンによって に変換されてい<p>paragraph</p>ます。

したがって、実際には一致++modal++ any number of A-Za-z0-9any symbol excluding + ++endmodal++を HTML に置き換える必要があります。

よくわからないか、preg_match使用preg_replaceする必要があります。

私はこれまでに得ました:

$string = '++modal++<p>Hello</p>++endmodal++';
$pattern = '/\+\+modal\+\+/';

preg_match($pattern, $string, $matches);

前もって感謝します。

編集: もう少し明確にするために、++modal++ と ++endmodal++ を HTML に置き換え、中間ビットをそのまま残します。

4

4 に答える 4

2

区切り文字は常に同じままで、常に文字列の同じ位置にあるため、ここで RegEx が必要だとは本当に思いません。正規表現はリソースにも費用がかかります.3番目の反論として、あなたはそれらに合わないと言いました.
その場合は、単純な置換または文字列のトリミングを使用しないでください。

$search = array('++modal++', '++endmodal++');
$replacement = array('<tag>', '</tag>');
$str = '++modal++<p>Hello</p>++endmodal++';

$result = str_replace($search, $replacement, $str);

もちろん、'<tag>''</tag>'は、置換用のプレースホルダーの例にすぎません。

これは、str_replace()のマニュアルに次のように書かれています。

If you don't need fancy replacing rules (like regular expressions),
you should always use this function instead of preg_replace(). 
于 2012-12-19T10:33:50.683 に答える
1

ここで車輪を再発明しようとしています。ここでは単純なテンプレート システムを作成しようとしていますが、SmartyTwigのような大規模で複雑なものから、試している以上のものではない非常に単純なものまで、使用できる PHP 用のテンプレート ツールは多数あります。書くこと。

私はそれらすべてを使用したわけではないので、1 つを推奨するのではなく、試すことができるテンプレート エンジンのリストを紹介します。少しグーグルで検索すると、おそらくもっと多くのことが見つかります。

どうしても自分で書きたい場合は、セキュリティを考慮することが重要です。ユーザーが入力したデータを含むものを出力する場合は、Web ページに表示するために、すべての出力が適切にエスケープされ、サニタイズされていることを確認する必要があります。安全でないテンプレート システムを利用して、サイトを完全に侵害する一般的なハッキングが数多くあります。

于 2012-12-19T10:38:05.697 に答える
1
<?php
$string = '++modal++<p>Hello</p>++endmodal++';
$patterns = array();
$patterns[0] = "/\+\+modal\+\+/"; // put '\' just before +
$patterns[1] = "/\+\+endmodal\+\+/";

$replacements = array();

$replacements[1] = '<html>';
$replacements[0] = '</html>';

echo preg_replace($patterns, $replacements, $string);
?>

この例と非常によく似ています

于 2012-12-19T10:47:09.077 に答える
1

以下を使用して、目的のコンテンツを取得する必要があると思います。

preg_match('/\+\+modal\+\+([^\+]+)\+\+endmodal\+\+/', $string, $matches)

$matches[1] = '<p>Hello</p>
于 2012-12-19T10:24:07.870 に答える