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";
}