我希望获得一个字符串的一部分,直到第一个非字母数字字符。 目前,我有以下字符串与我想要显示的内容。
Go Forty Go (IRE) 471 -> Go Forty Go
Pearl Noir 15528258 D3 -> Pearl Noir
Synonym (ITY) 1793158-00 D1 -> Synonym
在上述情况下,我想在数字或(
之前提取字符。
答案 0 :(得分:1)
你的意思是:
$repl = preg_replace('/\h*[^ a-zA-Z].*$/', '', $input);
Go Forty Go
Pearl Noir
Synonym
顺便说一下,这是在第一个非字母+非空格字符后删除。
答案 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"
]