文字列からすべての角かっこを削除して、文字列を保持する必要があります。私は周りを見回してきましたが、すべてのトピック OP は文字列を何かに置き換えたいと考えています。
つまり: [[link_to_page]]
次のようになります: link_to_page
php 正規表現を使用する必要があると思いますが、誰か助けてもらえますか?
前もって感謝します
str_replace を使用するだけです。
$string = str_replace(array('[[',']]'),'',$string);
しかし、これは ']]' クロージャーのない '[[' を取得します。そして、'[[' の始まりのない ']]'。
あなたが何を望んでいるのかは完全には明らかではありませんが...
ペアリングなどを気にせずに単に「すべての角括弧を削除」したい場合は、単純な str_replace がそれを行います:
str_replace( array('[',']') , '' , $string )
それは正規表現ではありません (そうである必要もありません)。
内容が不明なペアの二重括弧をアンラップしたい場合は、代わりにpreg_replaceを使用する正規表現の置換が必要です。
[
とは正規表現のメタ文字であるため]
、バックスラッシュでエスケープする必要があります。
二重括弧で囲まれたテキストのすべてのインスタンスに一致させるには、パターン\[\[\w+\[\]
を使用し、これらの括弧を置き換えるには、内容を (括弧で囲むことによって) キャプチャ グループに入れ、すべてのインスタンスを次のように置き換えます。
$output = preg_replace( '/\[\[(\w+)\[\]/' , '$1' , $string );
は、\w
任意の英数字またはアンダースコアに一致します。許可する文字の数を増やしたり減らしたりしたい場合は、更新することができます\[\[([a-z\-_]+)\[\]
。
角かっこの内容を処理したい場合は、fluminis による回答を参照してください。
使用できますpreg_replace
:
$repl = preg_replace('/(\[|\]){2}/', '', '[[link_to_page]]');
または使用str_replace
:
$repl = str_replace(array('[[', ']]'), '', '[[link_to_page]]');
1 つの一致のみが必要な場合:
preg_match('/\[\[([^\]]+)\]\]/', $yourText, $matches);
echo $matches[1]; // will echo link_to_page
または、テキストからすべてのリンクを抽出したい場合
preg_match_all('/\[\[([^\]]+)\]\]/', $yourText, $matches);
foreach($matches as $link) {
echo $link[1];
}
読み方'/\[\[([^\]]+)\]\]/'
/
正規表現を開始します\[\[
[
[ はメタ文字であるため、エスケープする必要があります。([^\]]+)
] ではないすべての文字を取得します\]\]
]
] はメタ文字であるため、エスケープする必要があります。/
正規表現を終了します試す
preg_replace(/(\[\[)|(\]\])/, '', $string);