使用正则表达式匹配多个变量(PHP / JS)

时间:2012-09-30 13:54:00

标签: php javascript regex

我理解如何使用PHP的preg_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(或任何语言)中是否总是相同或不同。

2 个答案:

答案 0 :(得分:1)

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

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

上述正则表达式应该匹配两种格式。 (help|business)基本上表示匹配helpbusiness

所以最后的答案是:

$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中使用。你不需要调整它。

答案 1 :(得分:1)

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

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

请注意不同功能的返回值。 PHP在Javascript中返回一个包含比此代码更多信息的数组。