解码正则表达式

3
我想解析一个正则表达式。 有没有一种方法可以检查下面的正则表达式的含义:
^(PC([Y\\d])|GC([Y\\d])|Y|\\d)\\d{4,5}$
3个回答

10

你可以使用Regular Expression AnalyzerDebuggex来分析正则表达式。

^ = start of string
() = capturing groups
[] = character classes
\d = digit in 0-9
\\ = literal backslash
| = OR
{} = count of leading item
$ = end of string

抱歉,我对正则表达式不熟悉。您能帮助我理解正则表达式中分组的意义吗? - user179516
@user179516 你具体遇到了哪个部分的问题? - Anirudh Ramanathan
PC([])和GC([])组对我来说看起来很相似。我正在尝试理解为什么我们在这里添加了两个组。 - user179516
@user179516 他们是被“|”分隔开的,它代表或。方括号“[]”内所含的字符中的任意一个都能匹配一次。 - Anirudh Ramanathan
@user179516:如果没有明确用于某些匹配,这两个都是多余的。您需要向我们展示应用此正则表达式的代码。 - Bergi

3
这里是正在发生的情况的分解。
正则表达式:^(PC([Y\\d])|GC([Y\\d])|Y|\\d)\\d{4,5}$
 1. ^        -  Beginning of line  
 2. (        -  Beginning of a capture group
 3. PC       -  Finds `PC` exactly  
 4. ([Y\\d]) -  Creates a capture group for a Y or a single digit (0-9)
 5. |        -  This is an OR statement
 6. GC       -  Finds `GC` exactly
 7. ([Y\\d]) -  Same as 4
 8. |        -  This is an OR statement
 9. Y        -  Finds `Y` exactly
10. |        -  This is an OR statement
11. \\d      -  This looks for a single digit (0-9)
12. )        -  End of capture group.  Lines 3-11 will be in this capture group
13. \\d{4,5} -  This will look any digit exactly 4 or 5 times
14. $        -  End of line

这里有3个捕获组:

1. (PC([Y\\d])|GC([Y\\d])|Y|\\d)
2. ([Y\\d])  (The first one)
3. ([Y\\d])  (The second one)

下面是一组有效的匹配结果(任何数字都可以被找到,我只是用123456来展示有多少数字位):
- PCY1234 - PCY12345 - PCY1234 - PCY12345 - PC12345 - PC123456 - GC12345 - GC123456 - GCY1234 - GCY12345 - Y1234 - Y12345 - 12345 - 123456 这里 是一个指向RegExr的链接,其中包含了每个匹配项的捕获组解释。
此外,双重 \ 的原因是为了转义Java中的 \。并非所有语言都需要这样做,据我所知,有些语言需要3个。如果您注意到上面的RegExr,我已经将它们删除,以便RegExr能够正确解析正则表达式。

谢谢,这就是我自学正则表达式的方法 :) - Nick

0

Regexper 也是一个分析正则表达式的好工具。

Image generated by Regexper


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接