地址解析 PHP 正则表达式



我得到了结构来解析地址中的门号/平面号。因此,请指导我如何使用正则表达式执行此操作。我也尝试使用以下正则表达式来解析它,但它没有达到我们的预期。

preg_match('![0-9/-]+!', $address, $matches);

此外,我还添加了一些示例输入和预期输出

Input
#302 MEENA RESIDENCY NEW ALLAPUR 600032
Expected Output
302
Input
No 35/2 2nd main 2nd cross subramanium l ayout viginapura ramurthy nagar 600032
Expected Output
35/2
Input
17-13-54 jonnaguddi vzm,near bhashyam school 600032
Expected Output
17-13-54
Input
Floor 4,plot no 285 2 birla mansion d d sathe marg prathana samaj girgaon mumbai 600032
Expected Output
285
Input
3-a  birla mansion d d sathe marg prathana samaj girgaon mumbai 600032
Expected Output
3-a
Input
3a birla mansion d d sathe marg prathana samaj girgaon mumbai 600032
Expected Output
3a
Input
3/a birla mansion d d sathe marg prathana samaj girgaon mumbai 600032
Expected Output
3/a
Input
3/2a birla mansion d d sathe marg prathana samaj girgaon mumbai 600032
Expected Output
3/2a
Input
3a/2 birla mansion d d sathe marg prathana samaj girgaon mumbai 600032
Expected Output
3a/2
Input
3/2-a birla mansion d d sathe marg prathana samaj girgaon mumbai 600032
Expected Output
3/2-a
Input
3-a/2 birla mansion d d sathe marg prathana samaj girgaon mumbai 600032
Expected Output
3-a/2

谢谢

您可以使用

~(?:#|bnos*|^)(d+(?:[/-]?w+)*)~im

~(?:#|bnos*|^)Kd+(?:[/-]?w+)*~im

查看正则表达式演示

详情

  • (?:#|bnos*|^) - 以下任一:
    • # - 哈希符号
    • bnos* - 一个完整的单词后跟 0+ 空格
    • ^ - 行的开头
  • K - 一个匹配重置运算符,丢弃当前迭代中到目前为止匹配的文本
  • d+ - 1+ 位数字
  • (?:[/-]?w+)* - 0+ 序列:
    • [/-]? - 可选/-
    • w+ - 1+ 字母/数字/_

表达式

此正则表达式在组 1 中选择所需的数字:

/^(?:#|.*?bnos+)?(d[w-/]*)/gmi

它执行与Wiktor Stribizew相同的选择,但步骤更少。

这是一个演示

解释

  • ^断言行的开头
  • (?:#|.*?bnos+)?表示数字前面可能带有:
    • #角色
    • 一个单词no后跟至少一个空格
  • (d[w-/]*)捕获以数字开头的数字,可以由字母、数字、短划线-或斜杠/组成。

如果一次测试一个字符串,则不需要 m 标志(多行(。

最新更新