带有单词边界的PHP正则表达式

SynackSA

因此,我正在尝试编写一个函数,该函数将从街道名称中提取出方向(如果该名称中存在该方向)。

例如,街上Burnhamthorpe Rd West会拉出这个词West

我已经使用以下正则表达式完成了此操作:

(?:\b(W)\b)|(?:\b(West)\b)

问题是当我点击以下地址Brown's Line并使用正则表达式测试南向时,它拉出了's

(?:\b(S)\b)|(?:\b(South)\b)

我的PHP如下

private function breakUpStreetNameParts($address)
{
    $directions = ["N" => "North", "S" => "South", "E" => "East", "W" => "West"];

    $direction = "";
    foreach ($directions as $short_dir => $long_dir) {
        if (preg_match_all("/(?:\b({$short_dir})\b)|(?:\b($long_dir)\b)/i", $address, $parts)) {
            $direction = $parts[0][0];
            $patterns = [
                "/{$parts[0][0]}/",
                "/\s\s/"
            ];
            $replacements = [
                "",
                " "
            ];
            $address = trim(preg_replace($patterns, $replacements, $address));
        }
    }

    return [
        "st_name"       => $address, 
        "st_direction"  => $direction
    ];
}

我该如何做正则表达式,以便它可以正常工作并忽略撇号作为单词边界?

编辑

在下面添加了我的修复程序:)

SynackSA

我对其进行了整理,即使对于以一个方向开头的街道名称,以下内容也可以完美地工作:

private function breakUpStreetNameParts($address)
{
    $directions = ["N" => "North", "S" => "South", "E" => "East", "W" => "West"];

    $direction = "";
    foreach ($directions as $short_dir => $long_dir) {
        if (preg_match_all("/(?:(?:\s)({$short_dir})(?:\s|$))|(?:(?:\s)({$long_dir})(?:\s|$))/i", $address, $parts)) {
            $direction = $parts[0][0];
            $patterns = [
                "/{$parts[0][0]}/",
                "/\s\s/"
            ];
            $replacements = [
                "",
                " "
            ];
            $address = trim(preg_replace($patterns, $replacements, $address));
        }
    }

    return [
        "st_name"       => $address, 
        "st_direction"  => $direction
    ];
}


Street name: Brown's Line
Array
(
    [st_name] => Brown's Line
    [st_direction] =>
)

Before breakup: Burnhamthorpe Road West
Array
(
    [st_name] => Burnhamthorpe Road
    [st_direction] =>  West
)

Before breakup: West Ave
Array
(
    [st_name] => West Ave
    [st_direction] =>
)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

正则表达式PHP单词边界?

来自分类Dev

正则表达式单词边界

来自分类Dev

带有连字符的正则表达式单词

来自分类Dev

正则表达式搜索:带有结尾的单词

来自分类Dev

正则表达式集中的单词边界或数字

来自分类Dev

正则表达式中跳过单词边界

来自分类Dev

正则表达式单词边界混乱

来自分类Dev

正则表达式的单词边界在'-'处中断

来自分类Dev

用Bash正则表达式匹配单词边界

来自分类Dev

正则表达式@单词边界中的字符

来自分类Dev

用Bash正则表达式匹配单词边界

来自分类Dev

正则表达式单词边界混乱

来自分类Dev

正则表达式与单词边界的并集

来自分类Dev

正则表达式-PCRE(PHP)-单词边界(\ b)和重音字符

来自分类Dev

正则表达式-PCRE(PHP)-单词边界(\ b)和重音字符

来自分类Dev

具有特定单词边界的正则表达式

来自分类Dev

有关python中单词边界的正则表达式模式

来自分类Dev

具有单词边界要求的JavaScript正则表达式

来自分类Dev

正则表达式匹配带有或不带有任何单词的用户代理

来自分类Dev

带有拉丁字符的Golang正则表达式边界

来自分类Dev

正则表达式:在.scss之前排除带有单词-map的单词

来自分类Dev

正则表达式检查单词和带有空格分隔字母的单词

来自分类Dev

正则表达式以匹配单词边界,但如果单词具有任何前缀或后缀,则将其排除

来自分类Dev

正则表达式以匹配单词边界,但如果单词具有任何前缀或后缀,则将其排除

来自分类Dev

(C#正则表达式)如何使用正则表达式使单词边界适用于括号?

来自分类Dev

如何将带有正则表达式的单词“分开”?

来自分类Dev

正则表达式规则排除带有特定单词的网址

来自分类Dev

带有数字的特定单词的正则表达式

来自分类Dev

带有空格字符的单词后面的正则表达式

Related 相关文章

  1. 1

    正则表达式PHP单词边界?

  2. 2

    正则表达式单词边界

  3. 3

    带有连字符的正则表达式单词

  4. 4

    正则表达式搜索:带有结尾的单词

  5. 5

    正则表达式集中的单词边界或数字

  6. 6

    正则表达式中跳过单词边界

  7. 7

    正则表达式单词边界混乱

  8. 8

    正则表达式的单词边界在'-'处中断

  9. 9

    用Bash正则表达式匹配单词边界

  10. 10

    正则表达式@单词边界中的字符

  11. 11

    用Bash正则表达式匹配单词边界

  12. 12

    正则表达式单词边界混乱

  13. 13

    正则表达式与单词边界的并集

  14. 14

    正则表达式-PCRE(PHP)-单词边界(\ b)和重音字符

  15. 15

    正则表达式-PCRE(PHP)-单词边界(\ b)和重音字符

  16. 16

    具有特定单词边界的正则表达式

  17. 17

    有关python中单词边界的正则表达式模式

  18. 18

    具有单词边界要求的JavaScript正则表达式

  19. 19

    正则表达式匹配带有或不带有任何单词的用户代理

  20. 20

    带有拉丁字符的Golang正则表达式边界

  21. 21

    正则表达式:在.scss之前排除带有单词-map的单词

  22. 22

    正则表达式检查单词和带有空格分隔字母的单词

  23. 23

    正则表达式以匹配单词边界,但如果单词具有任何前缀或后缀,则将其排除

  24. 24

    正则表达式以匹配单词边界,但如果单词具有任何前缀或后缀,则将其排除

  25. 25

    (C#正则表达式)如何使用正则表达式使单词边界适用于括号?

  26. 26

    如何将带有正则表达式的单词“分开”?

  27. 27

    正则表达式规则排除带有特定单词的网址

  28. 28

    带有数字的特定单词的正则表达式

  29. 29

    带有空格字符的单词后面的正则表达式

热门标签

归档