Php 如何提取包含字母和数字字符的单词?

Php 如何提取包含字母和数字字符的单词?,php,regex,Php,Regex,我想提取包含字母和数字字符的单词/ 例如,函数返回以下文本形式的ac64fc: foo ac64fc棒4544 preg_match('/^[0-9A-Z]*([0-9][A-Z]|[A-Z][0-9])[0-9A-Z]*$/', $subject); 我写了这个正则表达式来看看是否有 但是我不知道如何提取单词ac64fc您的字符串中没有大写字符,但是您可以使用单词边界\b和正向前瞻?=断言一个数字,并在匹配时确保至少匹配一个字符a-zA-Z 或者通过其他方法,查找字符a-z并匹配至少1个数

我想提取包含字母和数字字符的单词/ 例如,函数返回以下文本形式的ac64fc: foo ac64fc棒4544

 preg_match('/^[0-9A-Z]*([0-9][A-Z]|[A-Z][0-9])[0-9A-Z]*$/', $subject);
我写了这个正则表达式来看看是否有
但是我不知道如何提取单词ac64fc

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

或者通过其他方法,查找字符a-z并匹配至少1个数字

\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

字符串中没有大写字符,但可以使用单词边界\b和正向先行?=来声明数字,匹配时确保至少匹配一个字符a-zA-Z

或者通过其他方法,查找字符a-z并匹配至少1个数字

\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
尝试正则表达式:?=\w*\d?=\w*[a-zA-Z][a-zA-Z\d]+

尝试正则表达式:?=\w*\d?=\w*[a-zA-Z][a-zA-Z\d]+


您正在通过“^”和“$anchors”强制输入字符串仅采用给定格式。将它们替换为\b单词边界标记,并且您也完成了。不要忘记启用i标志,这使其不区分大小写

同样为了简化,您可以使用以下版本,该版本显然不调用lookarounds:

\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);

您正在通过“^”和“$anchors”强制输入字符串仅采用给定格式。将它们替换为\b单词边界标记,并且您也完成了。不要忘记启用i标志,这使其不区分大小写

同样为了简化,您可以使用以下版本,该版本显然不调用lookarounds:

\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);

为了澄清,您想匹配包含字母字符和数字字符的完整单词吗?例如,匹配ac64fc,但不匹配foo或4544?为了澄清,您想匹配包含字母字符和数字字符的完整单词?例如,匹配ac64fc,但不是foo或4544?@ZaGol你是这样尝试的吗?您使用的数据是什么?:如何将$matches[0]从数组转换为文本?我将它传递给一个方法,该方法获取一个文本变量,当我发送$matches[0]时,它不显示任何内容,当我发送$matches时,它显示Array@ZaGol您是否可以共享代码或发送显示代码和您使用的数据的链接?preg_match'/\b?=[a-Za-z0-9]*[0-9][a-Za-z0-9]*[a-Za-z][a-Za-z0-9]*\b/i',$subject$matches;消息$chat\u id、$matches、$message\u id;->显示数组消息$chat\u id,$matches[0],$message\u id;->显示nothing@ZaGol你确定你有正确的数据吗?var_转储$subject:给你什么?@ZaGol你是这样尝试的吗?您使用的数据是什么?:如何将$matches[0]从数组转换为文本?我将它传递给一个方法,该方法获取一个文本变量,当我发送$matches[0]时,它不显示任何内容,当我发送$matches时,它显示Array@ZaGol您是否可以共享代码或发送显示代码和您使用的数据的链接?preg_match'/\b?=[a-Za-z0-9]*[0-9][a-Za-z0-9]*[a-Za-z][a-Za-z0-9]*\b/i',$subject$matches;消息$chat\u id、$matches、$message\u id;->显示数组消息$chat\u id,$matches[0],$message\u id;->显示nothing@ZaGol你确定你有正确的数据吗?var_转储$subject:给你什么?