0

わかりました。2つの質問があります。

一番。私は本当に正規表現を吸います、それは私の頭に入ることができません。考えたり学んだりするためのアイデア、良いチュートリアルはありますか?(私は検索しましたが、チュートリアルであるため、それらを見つけました。あまりにも高度です。)

ナンバー2:

私がそれらの3つのストリングを手に入れたとしましょう:

$string = "his";

$str1 = "hi";
$str2 = "s";

だから私がやりたいのは、こんにちはを探してそれを置き換える正規表現です。だが!文字列に「s」が含まれている場合、それは置き換えられません。このような。

preg_replace('/'.$str1.'^['.$str2.']/',"replace it with this",$string);

動いていない!(もちろんそうではありません、正規表現は私のものではありません!)

私が言ったように、私は正規表現でこれを取得しません。str1を見つけたいのですが、str2が文字列に含まれていない場合、置き換えられません。誰?

4

2 に答える 2

2
$str = 'his';

$s1 = 'hi';
$s2 = 's';

$result = preg_replace('~' . preg_quote($s1) . '(?!' . preg_quote($s2) . ')~', 'replace with this', $str);
                      // ~hi(?!s)~
                      // this regex means:
                      //   "hi" string followed by anything but "s"

var_dump($result);

実例:

  1. http://ideone.com/XjX9n3
  2. http://ideone.com/U2JdkL
于 2013-01-29T02:06:51.490 に答える
0

次のような複数のフィルターを作成したいと思いsますm

$s = array('s', 'm');
$result = preg_replace('~hi(?!'. join('|', $s) .')~', 'replace with this', 'him');
print $result; // him
// and
$result = preg_replace('~hi(?!'. join('|', $s) .')~', 'replace with this', 'hiz');
print $result; // replace with thisz
于 2013-01-29T04:18:35.983 に答える