如何提取同时具有字母和数字字符的单词?

时间:2019-04-08 20:03:39

标签: php regex

我要提取同时具有字母和数字字符的单词/ 例如,该函数以下面的文本返回ac64fc: foo ac64fc条4544

 preg_match('/^[0-9A-Z]*([0-9][A-Z]|[A-Z][0-9])[0-9A-Z]*$/', $subject);

我写了这个正则表达式来查找是否存在 但我不知道该如何提取(ac64fc)这个词

3 个答案:

答案 0 :(得分:3)

通过^$锚点将输入字符串强制为给定格式。将它们替换为\b(单词边界标记),您就完成了(也不要忘记启用i标志,使其不区分大小写)。

为简化起见,您可以使用以下版本,该版本显然不会调用环顾四周:

\b(?:[a-z]+\d|\d+[a-z])[a-z\d]*\b

请参见live demo here

PHP代码:

preg_match('/\b(?:[a-z]+\d|\d+[a-z])[a-z\d]*\b/i', $subject);

答案 1 :(得分:1)

您的字符串中没有大写字符,但是您可以使用单词边界\b和正向超前(?=来声明数字,并且在匹配时请确保至少匹配一个字符a- zA-Z。

(或其他方法,查找字符a-z并匹配至少一位数字)

\b(?=[A-Za-z0-9]*[0-9])[A-Za-z0-9]*[A-Za-z][A-Za-z0-9]*\b

regex demo

使用不区分大小写的标志,您的代码可能类似于:

$subject = "foo ac64fc bar 4544";
preg_match('/\b(?=[A-Za-z0-9]*[0-9])[A-Za-z0-9]*[A-Za-z][A-Za-z0-9]*\b/i', $subject, $matches);
print_r($matches[0]); // ac64fc

答案 2 :(得分:1)

尝试使用正则表达式:(?=\w*\d)(?=\w*[a-zA-Z])[A-Za-z\d]+

Demo