PCRE正则表达式。从字符串2的末尾删除字符串1,任意数量的*字符

时间:2013-11-01 17:04:23

标签: php regex pcre

所以 - 我有这样的字符串(string1例子):

'aaaaabbbbbcccccword'
'aaaaabbbbbcccccwor*d'
'aaaaabbbbbcccccw**ord*'
'aaaaabbbbbccccc*word*'

我需要从这些字符串的末尾删除一些子字符串(string2)以及string2中的任何*字符以及字符串2之前的字符串和字符串2之后的字符串。 string2是一些变量。我想不出可以在这里使用的正则表达式。

//wrong example, * that might happen to be inside of $string1 are not removed :(
$string1 = 'aaaaabbbbbcccccw**ord*';
$string2 = 'word';
$result = preg_replace('#\*?' . $string2 . '\*?$#', '', $string1);

有人可以建议使用PCRE正则表达式吗?

P.S。我可以投票赞成列表中的15分吗?我可以投票给人吗?

2 个答案:

答案 0 :(得分:2)

这是一种方法:

$string1 = 'aaaaabbbbbcccccw**ord*';
$string2 = 'word';
$result = preg_replace('#\*?' . implode('\**', str_split($string2)) . '\*?$#', '',
                        $string1);
echo $result;
//=> aaaaabbbbbccccc

答案 1 :(得分:1)

$regexp = '#\**' . implode('\**', str_split($string2)) . '\**$#';
$result = preg_replace($regexp, '', $string1);

DEMO

str_split将字符串拆分为字符,然后implode在每个字符之间插入\**。然后我们在它之前和之后放置\**来抓取任何周围的*字符。