*hello*
に置き換えることができる必要がありますsomethinghellosomething
。regex でこれを行うことができます#\*(.*?)\*#
。問題は、 を無視したいということです**hello**
。私は試してみましたが、それはある程度機能しますが、 ではなく を#\*([^\s].*?)\*#
返します。エンケースされた文字列を置換しないようにするには、式に何を追加する必要がありますか?*somethinghellosomething*
**hello**
**
質問する
73 次
3 に答える
4
ルックアラウンドアサーションを試して、前後に別のがない場合にのみ一致させることができ*
ます。
(?<!\*)\*([^*]+)\*(?!\*)
.*?
また、あなたをに変更したことに注意してください[^*]+
。.*?
それ以外の場合は、何にも一致しない可能性があるため、2つの連続するアスタリスクに一致する可能性があります。
例: http: //regexr.com?33sp0
一つ一つ、これは:
(?<!\*) # not preceded by an asterisk
\* # an asterisk
([^*]+) # at least one non-asterisk character
\* # an asterisk
(?!\*) # not followed by an asterisk
于 2013-02-23T20:31:19.813 に答える
0
これを試して
#(\*+)(.*?)(\*+)#
サンプルコード
$notecomments=" **hello** *hello* ***hello*** ****hello**** ";
$output=preg_replace_callback(array("#(\*+)(.*?)(\*+)#"),function($matches){
if($matches[1]=="*")
return 'something'.$matches[2].'something';
else
return $matches[0];
},' '.$notecomments.' ');
出力:
**hello** somethinghellosomething ***hello*** ****hello****
于 2013-02-23T20:43:55.783 に答える
0
$text = '**something** **another** *hello*';
function myfunc($matches)
{
if($matches[0][0] == '*' && $matches[0][1] == '*'){
return $matches[0];
}else{
return str_replace('*', 'something', $matches[0]);
}
}
echo preg_replace_callback("/(\*){1,2}([^*]+)(\*){1,2}/","myfunc", $text);
于 2013-02-23T20:49:58.537 に答える