我要提取同时具有字母和数字字符的单词/ 例如,该函数以下面的文本返回ac64fc: foo ac64fc条4544
preg_match('/^[0-9A-Z]*([0-9][A-Z]|[A-Z][0-9])[0-9A-Z]*$/', $subject);
我写了这个正则表达式来查找是否存在 但我不知道该如何提取(ac64fc)这个词
答案 0 :(得分:3)
通过^
和$
锚点将输入字符串强制为给定格式。将它们替换为\b
(单词边界标记),您就完成了(也不要忘记启用i
标志,使其不区分大小写)。
为简化起见,您可以使用以下版本,该版本显然不会调用环顾四周:
\b(?:[a-z]+\d|\d+[a-z])[a-z\d]*\b
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
使用不区分大小写的标志,您的代码可能类似于:
$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]+