正则表达式不正确匹配?

时间:2013-04-19 20:36:24

标签: php html regex preg-match

我正在尝试搜索与模式中给出的正则表达式匹配的主题,但它无法正常工作。 我想匹配一个数字/ 10然后一个邮政编码

例如,如果字符串是“hello 3/10 HU2”,我希望preg_match函数匹配3和邮政编码,它需要按顺序

奇怪的是,当我以相反的顺序尝试preg_match所以HU2 3/10它可以工作但是当我改变它周围的代码时它不会识别值3.

任何帮助将不胜感激

下面的代码适用于订单HU2 3/10,但我需要它以相反的顺序

<?php

    preg_match('/([A-Za-z]{1,2}[0-9][A-Za-z0-9]?) ([0-9]{1,2})/', "HU2 3/10", $matches);    

    echo $matches[1];
    echo "<br>";
    echo $matches[2];


?>

3 个答案:

答案 0 :(得分:1)

如果您更改它,则必须在模式中包含/10。请注意,您可以更改分隔符,以便不必转义正斜杠:

preg_match('~([0-9]{1,2})/10 ([A-Za-z]{1,2}[0-9][A-Za-z0-9]?)~', "3/10 HU2", $matches);

[0-9]可以替换为\d。另外,如果10是一个可变数字,那么也很容易考虑到这一点:

preg_match('~(\d{1,2})/\d+ ([A-Za-z]{1,2}\d[A-Za-z0-9]?)~', "3/10 HU2", $matches);

作为最后的优化,使用i修饰符,让你省略一半的字母(它使图案不区分大小写):

preg_match('~(\d{1,2})/\d+ ([A-Z]{1,2}\d[A-Z0-9]?)~i', "3/10 HU2", $matches);

答案 1 :(得分:1)

你不匹配/ 10,是吗?

(\d{1,2})/10 ([A-Za-z]{1,2}\d\w?)

匹配

你好3/10 HU2

组1:3
第2组:HU2

答案 2 :(得分:0)

这是我用各种字符串尝试的正则表达式,似乎有效:

Regex: ([^ ]+) *(\d*\/10) *([A-Za-z0-9]+) *(.*)

Test strings:
1) hello 3/10 HU2
2) test this regex 3/10 HU2 param1 param2
3) testid 33323/10 HU2332GG param1 param2

我对所有要求都不太确定,但这可能是你的正则表达式的基础。您还可以使用在线正则表达式工具在此处快速验证您的正则表达式: http://www.regexplanet.com/advanced/java/index.html