将字符返回到第一个非字母数字字符

时间:2015-07-16 10:17:45

标签: php regex

我希望获得一个字符串的一部分,直到第一个非字母数字字符。 目前,我有以下字符串与我想要显示的内容。

Go Forty Go (IRE) 471    -> Go Forty Go
Pearl Noir 15528258 D3   -> Pearl Noir
Synonym (ITY) 1793158-00 D1   -> Synonym

在上述情况下,我想在数字或(之前提取字符。

3 个答案:

答案 0 :(得分:1)

你的意思是:

$repl = preg_replace('/\h*[^ a-zA-Z].*$/', '', $input);
Go Forty Go
Pearl Noir
Synonym

顺便说一下,这是在第一个非字母+非空格字符后删除。

RegEx Demo

答案 1 :(得分:1)

您可以使用以下正则表达式:

/^.*?(?=\s*[^\s\p{L}])/

$str = "Go Forty Go (IRE) 471    -> Go Forty Go";
$str2 = "Pearl Noir 15528258 D3   -> Pearl Noir";
$str3 = "Synonym (ITY) 1793158-00 D1   -> Synonym";
preg_match('/^.*?(?=\s*[^\s\p{L}])/', $str, $match);
echo $match[0] . PHP_EOL;
preg_match('/^.*?(?=\s*[^\s\p{L}])/', $str2, $match1);
echo $match1[0] . PHP_EOL;
preg_match('/^.*?(?=\s*[^\s\p{L}])/', $str3, $match2);
echo $match2[0] . PHP_EOL;

请参阅IDEONE code

输出:

Go Forty Go
Pearl Noir
Synonym

"核心"正则表达式是(?=\s*[^\s\p{L}])前瞻,使匹配停止在非字母或空格前面加上可选的空格(以修剪输出)。

如果您的输入中包含Unicode字母,请添加u标记:

/^.*?(?=\s*[^\s\p{L}])/u

答案 2 :(得分:0)

试试这个 -

>>> preg_match_all("/^(.*?)\s*[(0-9]/m",$s, $matches)
=> 3
>>> $matches[1]
=> [   
       "Go Forty Go",
       "Pearl Noir",
       "Synonym"
   ]