【问题标题】:C# Regex And Curly Braces For Repetition用于重复的 C# 正则表达式和花括号
【发布时间】:2013-07-18 10:25:22
【问题描述】:

我对正则表达式相对较新,并且仍在努力。目前,重复是我沮丧的根源。我被要求编写一个匹配 +447 格式的手机号码的正则表达式,然后是一个 9 位数的字符串。经过一番阅读,我想出了:

string num = @"+447123456789";
string reg = "^[+447]([0-9]{9})$";
Regex filter = new Regex(reg);

假设它已被读取,必须以 +447([...] 指定要匹配的显式字符)开头,后跟任意 9 位数字 0-9,但 filter.IsMatch(num) 始终返回 false。我尝试用 + 替换 {9} 并返回 true,尽管它在应该失败时也返回 true(即 num 保持值“+4”)。

鉴于我的结果,我认为我误解了 [...] (否则简单的 +4 不应返回 true)和 {...} (我理解它是指前一个序列(在我的情况,[0-9])重复...次,在我的情况下,9)。

非常感谢任何帮助, 提前致谢, CprlKleg

【问题讨论】:

  • [+447] 表示 +、4 或 7 之一。并非所有“+447”
  • 感谢您的评论,我今天学到了一些东西。

标签: c# regex repeat


【解决方案1】:

试试string reg = "^\+447([0-9]{9})$";string reg = "^\+447(\d{9})$";

【讨论】:

  • 非常感谢!两者都工作得很好。那么在 +447 之前使用 \ 字符是什么意思呢?它如何知道在 \ 之后何时停止匹配?
  • 别担心 - 我会接受的。显然,只需要等待。再次感谢
  • \+ 是因为 + 是正则表达式中的一个特殊字符,意思是“一个或多个”在转义之前放置一个反斜杠。 ^ 和 $ 是匹配您要匹配的字符串或行的开头和结尾的锚。
【解决方案2】:

您需要使用^\+447(\d{9})$

您必须知道+ 是正则表达式中的一个特殊字符,因此需要一个反斜杠字符来避免它。 + or . or $ 和许多其他被视为特殊字符。

\d 仅表示数字。 \w 表示字符+数字+下划线

希望对你有帮助。

【讨论】:

  • 哦,我开始明白了。非常感谢 :)。因此,通过将文字 447 保留在方括号之外告诉它必须完全匹配?
  • 接受更详细的回复。谢谢
  • 是的。任何按原样编写的内容都将匹配准确的文本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-22
  • 1970-01-01
  • 2023-04-02
  • 2023-04-08
  • 2018-09-12
  • 1970-01-01
  • 2020-01-07
相关资源
最近更新 更多