0

我正在尝试搜索与模式中给出的正则表达式匹配的主题,但它无法正常工作。我想匹配一个数字/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];


?>
4

3 回答 3

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);
于 2013-04-19T20:40:21.520 回答
1

你不匹配/ 10,是吗?

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

火柴

你好 3/10 HU2

第 1 组:3
第 2 组:HU2

于 2013-04-19T20:43:27.707 回答
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

于 2013-04-19T20:54:03.083 回答