2

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

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

我需要从这些字符串的末尾删除一些子字符串 (string2) 以及 string2 a 中的任何 * 字符以及 * 前面的 string2 和后面的 string2。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 正则表达式吗?

PS 我可以在列表 15 点上获得点赞吗?所以我可以投票给人们?

4

2 回答 2

2

这是一种方法:

$string1 = 'aaaaabbbbbcccccw**ord*';
$string2 = 'word';
$result = preg_replace('#\*?' . implode('\**', str_split($string2)) . '\*?$#', '',
                        $string1);
echo $result;
//=> aaaaabbbbbccccc
于 2013-11-01T17:12:22.330 回答
1
$regexp = '#\**' . implode('\**', str_split($string2)) . '\**$#';
$result = preg_replace($regexp, '', $string1);

演示

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

于 2013-11-01T17:10:01.437 回答