结合两个正则表达式过滤器

时间:2016-03-04 10:03:20

标签: regex

我总共花了n00b来使用正则表达式(我不是程序员而是支持工程师),为了解决工作中的问题,我需要将两个正则表达式组合成一个正则表达式:

<?php  

//first i retrieved the recaptcha coming through post method.
//i have used post method, you can use any method you want.

$recaptcha = $_POST['g-recaptcha-response'];

//After retrieving send a post curl request to verify it.
//you will have to send your secret key along with it.

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"https://www.google.com/recaptcha/api/siteverify");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,"secret=*******************************=".$recaptcha);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec ($ch);
$server_output = json_decode($server_output,true);
curl_close ($ch);

if($server_output['success']){
// captacha validated successfully.
}else{
// invalid captcha
}

&安培;

^89410[1|2]000[0-9]{10}|893207000500[0-9]{7}$

请注意我没有创建这两个正则表达式,它们是由不再适用于我的工作的开发人员创建的! 再一次,我以前从未使用过正则表达式,所以任何帮助都会非常感激!

2 个答案:

答案 0 :(得分:1)

你的第一个正则表达式是测试两个可能的正则表达式(|将两者分开)。如果你想添加其他可能性,那就是添加另一个由另一个|分隔的可能性。 (开头和结尾的^$标志着 - 输入的开头和结尾。)

但是,在您的情况下,与第一个正则表达式的第二部分匹配的可能字符串(数字)是与新正则表达式匹配的字符串的一部分(您的第二个),(Phew ...仍然和我一起?;)从而使第一部分的第二部分变得不必要了。

您可以看到它的示例here at regex101。删除中间部分,你仍然会得到相同的匹配。

所以,简短的回答是 -

^89410[1|2]000[0-9]{10}|893207000[0-9]{10}$

是你想要的。

问候。

编辑:

正如Wiktor指出的那样(我很想念它:P)您需要对正则表达式进行分组,或者将开始/结束标记分别添加到每个正则表达式,如^89410[1|2]000[0-9]{10}$|^893207000[0-9]{10}$

答案 1 :(得分:0)

您可以使用

^(89410[12]000[0-9]{10}|893207000500[0-9]{7}|893207000[0-9]{10})$
 ^                                          ^^^^^^^^^^^^^^^^^^^^

或更短,更有效,但不太可读:

^(89410[12]000[0-9]{10}|893207000(?:500[0-9]{7}|[0-9]{10}))$

问题是第一种模式中的^$分别仅适用于第一种和最后一种选择。您需要使用分组(...)