我理解如何使用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(或任何语言)中是否总是相同或不同。
答案 0 :(得分:1)
实际上解决方案非常简单。对于要匹配的每个模式,将该模式放在括号(...)
之间。因此,要使用已使用的内容(.*)
来提取任何模式。要简单区分“帮助”与“业务”,您可以在正则表达式中使用|
:
/(help|business)-(.*)@mysite.com/
上述正则表达式应该匹配两种格式。 (help|business)
基本上表示匹配help
或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中使用。你不需要调整它。
答案 1 :(得分:1)
是的,凯末尔是对的。您可以在javascript中使用相同的模式。
var str="business-321zyx@mysite.com";
var patt1=/(help|business)-(.*)@mysite.com/;
document.write(str.match(patt1));
请注意不同功能的返回值。 PHP在Javascript中返回一个包含比此代码更多信息的数组。