0

我了解如何使用 PHPpreg_match()从字符串中提取变量序列。但是,如果有2 个变量需要匹配,我不确定该怎么做。

这是我感兴趣的代码:

$string1 = "help-xyz123@mysite.com";
$pattern1 = '/help-(.*)@mysite.com/'; 
preg_match($pattern1, $string1, $matches);
print_r($matches[1]); // prints "xyz123"

$string2 = "business-321zyx@mysite.com";

所以基本上我想知道如何提取两种模式:1)字符串的第一部分是“帮助”还是“业务”以及 2)第二部分是“xyz123”还是“zyx321”。

可选的额外问题是用 JS 编写的答案是什么样的?我从来没有真正弄清楚正则表达式(即,包括斜杠的代码/..../)在 PHP 与 JS(或与此相关的任何语言)中是否总是相同或不同。

4

2 回答 2

1

解决方案实际上非常简单。对于您要匹配的每个模式,将该模式放在括号之间(...)。因此,要提取任何模式,请使用您已经使用(.*)的 . 为了简单地区分“帮助”与“业务”,您可以|在正则表达式模式中使用:

/(help|business)-(.*)@mysite.com/

上面的正则表达式应该匹配这两种格式。(help|business)基本上说,要么 matchhelp要么business.

所以最后的答案是这样的:

$string1 = "help-xyz123@mysite.com";
$pattern1 = '/(help|business)-(.*)@mysite.com/'; 
preg_match($pattern1, $string1, $matches);
print_r($matches[1]); // prints "help"
echo '<br>';
print_r($matches[2]);  // prints "xyz123"

相同的正则表达式模式应该可以在 Javascript 中使用。你不需要调整它。

于 2012-09-30T14:03:37.320 回答
1

是的,凯末尔是对的。您可以在 javascript 中使用相同的模式。

var str="business-321zyx@mysite.com";
var patt1=/(help|business)-(.*)@mysite.com/;
document.write(str.match(patt1));

只需注意不同函数的返回值。PHP 返回一个比 Javascript 中的代码包含更多信息的数组。

于 2012-09-30T14:14:17.320 回答