首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解正则表达式时遇到问题

理解正则表达式时遇到问题
EN

Stack Overflow用户
提问于 2011-11-20 23:13:43
回答 8查看 133关注 0票数 0

我理解基本的正则表达式,但是当我看到这样的表达式时

代码语言:javascript
复制
/^(28|29|[3-5][7]*[0-9])$/

我不能破译超过某一点的意思。我知道每件事单独意味着什么,但合在一起对我来说没有意义,我也不明白星号在这个上下文中意味着什么。有谁能解释一下吗?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-11-20 23:20:51

代码语言:javascript
复制
/^(28|29|[3-5][7]*[0-9])$/

首先分离管道,使其匹配:

/^28$//^29$//^[3-5][7]*[0-9]$/

前两个是很明显的,28或29没有其他任何东西都是匹配的,所以第三个:

代码语言:javascript
复制
^[3-5]

以数字3、4或5开头

[7]*后跟0-无限量的7,直到[0-9]$,这意味着以0到9之间的数字结束。

票数 7
EN

Stack Overflow用户

发布于 2011-11-20 23:20:46

我已经分解了regexp,并添加了许多空格和注释来解释它。

代码语言:javascript
复制
^         # Match beginning of string
( 28      # Start group. Match 28
| 29      # OR 29
| [3-5]   # OR a single digit in the range 3-5
  [7]*    # then the digit 7, any number of times
  [0-9]   # then a single digit in the range 0-9
)         # end group
$         # match end of string

http://www.regular-expressions.info/repeat.html*的解释

星号或星号

告诉引擎零次或多次尝试匹配前面的标记。

然后它会继续

加号告诉引擎尝试匹配前面的标记一次或多次。<[A-Za-z][A-Za-z0-9]*>匹配没有任何属性的HTML标记。尖括号是字面量。第一个字符类匹配一个字母。第二个字符类匹配字母或数字。星号重复第二个字符类。因为我们使用了星号,所以如果第二个字符类不匹配任何内容也没问题。所以我们的正则表达式将匹配一个像<B>这样的标记。当匹配<HTML>时,第一个字符类将匹配H。星号将导致第二个字符类重复三次,每一步都匹配TML

方括号(字符类,[...])在http://www.regular-expressions.info/charclass.html中有说明

使用“字符类”,也称为“字符集”,您可以告诉正则表达式引擎只匹配几个字符中的一个。只需将要匹配的字符放在方括号中即可。如果要匹配a或e,请使用[ae]。您可以在gr[ae]y中使用它来匹配graygrey。如果您不知道正在搜索的文档是用美国英语还是英国英语编写的,这将非常有用。

一个字符类只匹配一个字符。gr[ae]y不会与graaygraey或任何类似的东西相匹配。字符类中字符的顺序并不重要。结果是相同的。

可以在字符类中使用连字符来指定字符范围。[0-9]匹配0到9之间的单个数字。您可以使用多个范围。[0-9a-fA-F]匹配单个十六进制数字,不区分大小写。您可以组合范围和单个字符。[0-9a-fxA-FX]匹配十六进制数字或字母X。同样,字符和范围的顺序并不重要。

票数 4
EN

Stack Overflow用户

发布于 2011-11-20 23:20:35

此正则表达式匹配:

代码语言:javascript
复制
  28
OR
  29
OR
  3, 4 or 5
  optionally followed by 0 or more 7's
  followed by a number from 0-9
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8202447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档