Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式匹配字符串中的手机号码_Regex_Go - Fatal编程技术网

Regex 正则表达式匹配字符串中的手机号码

Regex 正则表达式匹配字符串中的手机号码,regex,go,Regex,Go,我想从字符串中匹配正确的电话号码。例如: string := "my phone number is 15817452367" re := regexp.MustCompile(`1[34578][0-9]{9}`) re.FindAllString(string, -1) -> 15817452367 此结果是正确的,但对于另一个字符串: string := "my card number is 115817452367" re := regexp.MustCompile(`1[345

我想从字符串中匹配正确的电话号码。例如:

string := "my phone number is 15817452367"
re := regexp.MustCompile(`1[34578][0-9]{9}`)
re.FindAllString(string, -1)
-> 15817452367
此结果是正确的,但对于另一个字符串:

string := "my card number is 115817452367"
re := regexp.MustCompile(`1[34578][0-9]{9}`)
re.FindAllString(string, -1)
-> 15817452367 (invalid)

这个正则表达式也匹配电话号码,但我希望它不是一个有效值,我不希望从数字字符串中获取电话号码。我怎样才能修改正则表达式?提前谢谢

您可以检查匹配的字符串前后是否没有数字。 为了检查这一点,请将图案嵌套在两个
[^0-9]*
之间:它表示“没有或不是数字”


通过这种方式,
15817452367
将被检测为匹配,但
115817452367
将不会检测到匹配。

您可以检查正则表达式的begging和end,查看字符串的begging/end或非数字字符,并仅捕获电话号码

以下是一些正在工作的正则表达式示例:

(?:^|[^0-9])(1[34578][0-9]{9})(?:$|[^0-9])

在戈兰

re := regexp.MustCompile(`(?:^|[^0-9])(1[34578][0-9]{9})(?:$|[^0-9])`)
submatch := re.FindStringSubmatch("Phone Number: 15817452367;")
if len(submatch) < 2 {
    // No match found
}
match := submatch[1]
查找您正在搜索的电话号码。 被关在捕获组中

(?:^|[^0-9])
(1[34578][0-9]{9})
(?:$|[^0-9])
查找字符串或非数字字符的结尾。 包含在非捕获组中

(?:^|[^0-9])
(1[34578][0-9]{9})
(?:$|[^0-9])

我在试着理解你的问题。也许你想用
^1[34578][0-9]{9}$
来表示行乞和字符串的结尾?或者
(?:^[0-9])1[34578][0-9]{9}(?:$[0-9])
数字之前是什么?您需要以某种方式限定字符串的开头,这可能意味着
^
。如果你想得到一个精确的匹配,将你的正则表达式锚定在一端或两端总是“最安全”的。第二个是我希望正则表达式工作良好的地方。我将begging设置为检查文本的开头是否为
,或者是否有未捕获的非数字字符。与字符串的结尾相同。所以你应该只留下电话号码!我不确定这不是类似的复制品。如果您有一个数字格式,但有时该数字格式可能会被破坏,那么为什么要使用该数字格式?您可以尝试将
1?
前置到正则表达式,否则只需使用类似
\b\d{9,}\b
的内容,确保电话号码格式满足最低/最高要求。这是一个很好的答案!但是对于字符串“我的电话号码是15817452367”,我希望得到电话号码。是的,这很有效。这只是
match
变量的结果@我非常高兴。只花了我2秒钟的时间!