首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >组合preg_match正则表达式

组合preg_match正则表达式
EN

Stack Overflow用户
提问于 2015-03-08 13:40:42
回答 3查看 274关注 0票数 1

我想知道是否有一种方法可以将多个regex语句组合成一个语句?也许我可以使用数组,或者您是否可以仅使用regex来完成此操作?

代码语言:javascript
运行
复制
$reg    = '/[a-zA-Z0-9]{7}$/';
$reg_l  = '/[a-zA-Z0-9]{7}-lg$/';
$base   = 'Fz4vqVW'; // May also be Fz4vqVW-lg


if (preg_match($reg,$base) { //Just checks for a 7 long string
    echo '1';
} elseif (preg_match($reg_l,$base) { //Checks for 7 long string with -lg at the end
    echo '2';
} else {
    echo '0';
}
EN

回答 3

Stack Overflow用户

发布于 2015-03-08 13:50:14

它可以在一个正则表达式中与preg_replace_callback结合,如下所示:

代码语言:javascript
运行
复制
$reg = '/^(?:([a-zA-Z0-9]{7})(-lg)?|.*)$/';
$base   = 'Fz4vqVW'; // May also be Fz4vqVW-lg

echo preg_replace_callback($reg, function($m) { 
  if (isset($m[2])) return 2; elseif (isset($m[1])) return 1; else return 0; }, $base);

示例代码:

代码语言:javascript
运行
复制
$arr=array('Fz4vqVW', 'Fz4vqVW-lg', 'foobar');
foreach ($arr as $a) {
    echo preg_replace_callback($reg, function($m) { if (isset($m[2])) return 2;
         elseif (isset($m[1])) return 1; else return 0; }, $a)."\n";
}

输出:

代码语言:javascript
运行
复制
1
2
0
票数 1
EN

Stack Overflow用户

发布于 2015-03-08 14:22:03

您还可以修改preg_match()调用,如下所示:

代码语言:javascript
运行
复制
$reg  = '/^[a-zA-Z0-9]{7}(-lg)?$/';

if (preg_match($reg, $base, $m))
    echo isset($m[1]) ? 2 : 1; else echo 0;
票数 1
EN

Stack Overflow用户

发布于 2015-03-08 22:02:32

您可以简单地计算匹配结果中的项目数:

代码语言:javascript
运行
复制
$base   = 'Fz4vqVW';
$m = [];

preg_match('~^[a-zA-Z0-9]{7}(-lg)?$~D', $base, $m);
echo count($m);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28923480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档