我无法弄清楚这个regex
匹配的内容:
答: "\\/\\/c\\/(\\d*)"
B: "\\/\\/(\\d*)"
我认为他们匹配某种数字序列,因为\d
匹配任何数字,但我想知道一个与此regex
匹配的字符串示例。
模式语法是ICU
指定的语法。表达式是在iOS应用中使用NSRegularExpression
创建的,并且是正确的。
答案 0 :(得分:4)
第一个匹配//c/
+ 0个或更多个数字。第二个匹配//
+ 0或更多数字。两个数字都被捕获。
答案 1 :(得分:2)
//c/123
//12345
答案 2 :(得分:2)
编辑:这个答案来自Java人。这是错误的,因为它实际上是一个C / C#问题,直到它被回答后才明白。请参阅以下评论, 不要 向下投票。在我看来,它应该保留下来。
这个正则表达式匹配一个奇怪的字符序列,乍一看,几乎看起来像一个正则表达式,因为\d
是一个数字,后面跟一个星号(\d*
)意味着零 - 或更多数字。但它不一个数字,因为转义斜杠被转义。
\\/\\/c\\/(\\d*)
因此,例如,这个匹配以下文本:
\/\/c\/\
\/\/c\/\d
\/\/c\/\dd
\/\/c\/\ddd
\/\/c\/\dddd
\/\/c\/\ddddd
\/\/c\/\dddddd
...
这个几乎是一样的
\\/\\/(\\d*)
除了您只是从上面的结果中删除c\/
:
\/\/\
\/\/\d
\/\/\dd
\/\/\ddd
\/\/\dddd
\/\/\ddddd
\/\/\dddddd
...
在这两种情况下,最终的\
和可选的d
都是[捕获组] [1]。
我的第一印象是这些正则表达式旨在用Java字符串转义,这意味着它们将完全无效。如果 转义为Java字符串,例如
Pattern p = Pattern.compile("\\/\\/c\\/(\\d*)");
它会无效,因为在取消转义后,会导致这个无效的正则表达式:
\/\/c\/(\d*)
单个转义斜杠(\
)无效。但是\d
是有效的,因为它意味着任何数字。
但是,我不认为它们无效,并且它们 不 转义为Java字符串。他们只是奇怪。
非常有趣。
答案 3 :(得分:1)
当我使用在Windows上模拟Bash的Cygwin时,我有时遇到必须逃避转义字符的情况,我认为这使得这个表达看起来很奇怪。例如,当我使用sed寻找单个'\'时,我有时必须将其写为'\\\\'。 (有趣的是,StackOverflow证明了我的观点。如果你在评论中写下4个反斜杠,它只会显示两个。所以如果你再次处理它,它们可能会根据你的情况消失。)
考虑到这一点,如果您来自类似的情况,将反斜杠对视为仅代表一对可能会有所帮助。我的猜测就是你。因此,我会说Erik Duymelinck可能会被发现。这将捕获一系列数字,这些数字可能会或可能不会跟随一些斜线和c:
// C / 000
// 00000