preg_replace 除了字符串开头的所有数字和星号字符
preg_replace all digit and asterisk characters except at start of string
需要替换字符串中的所有字符,但字符串开头(或单词的一部分)除外。
例如输入:
MSFT *<E07004QY6W>
WOOLWORTHS W1157
GOOGLE*ADWS7924436927
COLES 0829
ROBLOX.COM 888-858-25
7-ELEVEN 2179
COLES EXPRESS 1896
结果应该是:
MSFT
WOOLWORTHS
GOOGLE
COLES
ROBLOX.COM
7-ELEVEN
COLES EXPRESS
可以phppreg_replace实现吗?
到目前为止尝试过:
- '/\d+/g' - 但它删除了所有数字,没有其他内容
- '/(*|\d+$)/' - 但这对某些人来说不太有效,导致 "ROBLOX.COM 888-858-"
不确定这是否适用于其他极端情况,但您可以尝试使用此替代品:
$txt = preg_replace('~^[^*\s]+(?: \pL+(?!\S))*\K.*~m', '', $txt);
解释:
^[^*\s]+
接受行首不是 space 或星号的所有内容。
(?: \pL+(?!\S))*
并最终由 space 分隔的字母组。
\K
从匹配结果中删除所有先前匹配的字符。
.*
获取将被替换的所有剩余字符。
$in = array(
'MSFT *<E07004QY6W>',
'WOOLWORTHS W1157',
'GOOGLE*ADWS7924436927',
'COLES 0829',
'ROBLOX.COM 888-858-25',
'7-ELEVEN 2179',
'COLES EXPRESS 1896',
);
foreach ($in as $str) {
echo preg_replace('/[\h*]+[^\h*]+$/', '', $str),"\n";
}
输出:
MSFT
WOOLWORTHS
GOOGLE
COLES
ROBLOX.COM
7-ELEVEN
COLES EXPRESS
需要替换字符串中的所有字符,但字符串开头(或单词的一部分)除外。
例如输入:
MSFT *<E07004QY6W>
WOOLWORTHS W1157
GOOGLE*ADWS7924436927
COLES 0829
ROBLOX.COM 888-858-25
7-ELEVEN 2179
COLES EXPRESS 1896
结果应该是:
MSFT
WOOLWORTHS
GOOGLE
COLES
ROBLOX.COM
7-ELEVEN
COLES EXPRESS
可以phppreg_replace实现吗?
到目前为止尝试过:
- '/\d+/g' - 但它删除了所有数字,没有其他内容
- '/(*|\d+$)/' - 但这对某些人来说不太有效,导致 "ROBLOX.COM 888-858-"
不确定这是否适用于其他极端情况,但您可以尝试使用此替代品:
$txt = preg_replace('~^[^*\s]+(?: \pL+(?!\S))*\K.*~m', '', $txt);
解释:
^[^*\s]+
接受行首不是 space 或星号的所有内容。
(?: \pL+(?!\S))*
并最终由 space 分隔的字母组。
\K
从匹配结果中删除所有先前匹配的字符。
.*
获取将被替换的所有剩余字符。
$in = array(
'MSFT *<E07004QY6W>',
'WOOLWORTHS W1157',
'GOOGLE*ADWS7924436927',
'COLES 0829',
'ROBLOX.COM 888-858-25',
'7-ELEVEN 2179',
'COLES EXPRESS 1896',
);
foreach ($in as $str) {
echo preg_replace('/[\h*]+[^\h*]+$/', '', $str),"\n";
}
输出:
MSFT
WOOLWORTHS
GOOGLE
COLES
ROBLOX.COM
7-ELEVEN
COLES EXPRESS