0

好吧,我有两个问题。

第一。我真的很讨厌正则表达式,它无法进入我的脑海。任何想法如何思考或学习,任何好的教程?(我已经搜索并发现它们,因为它们是教程,太高级了。)

第二:

假设我得到了这 3 个字符串:

$string = "his";

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

所以我想做的是一个寻找 hi 并替换它的正则表达式。但!如果字符串中有“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

我认为您想制作多个过滤器,例如:sm或更多..

$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 回答