Php preg_替换除字符串开头以外的所有数字和星号字符
需要替换字符串中的所有字符,字符串(或单词的一部分)开头的字符除外 例如输入:Php preg_替换除字符串开头以外的所有数字和星号字符,php,regex,preg-replace,Php,Regex,Preg Replace,需要替换字符串中的所有字符,字符串(或单词的一部分)开头的字符除外 例如输入: MSFT *<E07004QY6W> WOOLWORTHS W1157 GOOGLE*ADWS7924436927 COLES 0829 ROBLOX.COM 888-858-25 7-ELEVEN 2179 COLES EXPRESS 1896 php preg_替换可以实现这一点吗 迄今为止: “/\d+/g”-但它会删除所有数字,而不会删除任何其他数字 “/(*|\d+$)/”-但这在某些情况下
MSFT *<E07004QY6W>
WOOLWORTHS W1157
GOOGLE*ADWS7924436927
COLES 0829
ROBLOX.COM 888-858-25
7-ELEVEN 2179
COLES EXPRESS 1896
php preg_替换可以实现这一点吗
迄今为止:
- “/\d+/g”-但它会删除所有数字,而不会删除任何其他数字
- “/(*|\d+$)/”-但这在某些情况下不起作用,结果是“ROBLOX.COM 888-858-”
$txt = preg_replace('~^[^*\s]+(?: \pL+(?!\S))*\K.*~m', '', $txt);
说明:
^[^*\s]+
接受行首处不是空格或星号的所有内容。
(?:\pL+(?!\S))*
最后是一组用空格分隔的字母。
\K
从匹配结果中删除以前匹配的所有字符。
*
接受将被替换的所有剩余字符。不确定这是否适用于其他边缘情况,但您可以尝试此替换:
$txt = preg_replace('~^[^*\s]+(?: \pL+(?!\S))*\K.*~m', '', $txt);
$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";
}
说明:
^[^*\s]+
接受行首处不是空格或星号的所有内容。
(?:\pL+(?!\S))*
最后是一组用空格分隔的字母。
\K
从匹配结果中删除以前匹配的所有字符。
*
将替换所有剩余的字符。请用您迄今为止尝试过的内容更新问题。首先看一下:([a-zA-Z0-9\.\-]+)。+\n
问题是匹配“COLES EXPRESS”而不匹配“WOOLWORTHS W1157”。是的,preg\u replace
可以使用正确的正则表达式来完成此操作。请用您迄今为止尝试过的内容更新问题。首先来看一下:([a-zA-Z0-9\.\-]+)。+\n
问题是匹配“COLES EXPRESS”而不匹配“WOOLWORTHS W1157”。是的,preg\u replace
可以使用正确的正则表达式完成此操作。很好!谢谢,很好!非常感谢。
$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";
}