有人可以帮助我更好地理解正则表达式中的零或一,并可能在同一个正则表达式语句中嵌套另一个

Posted

技术标签:

【中文标题】有人可以帮助我更好地理解正则表达式中的零或一,并可能在同一个正则表达式语句中嵌套另一个【英文标题】:Can someone help me better understand zero or one in regex and possibly with nesting another within the same regex statement 【发布时间】:2020-09-29 23:25:46 【问题描述】:

所以我正在创建一个正则表达式来识别基本 IRC 的命令,并且遇到了一个给我带来一些麻烦的命令,让我稍微思考一下我以前的命令,并可能让我纠正一些错误。

从本质上讲,JOIN 消息将允许将用户添加到频道以与其他人聊天,并且出于该项目的目的,JOIN 还将创建频道并将用户添加为其第一个成员。假设用户在此之前已登录,因此唯一需要的信息是他们打算加入的频道。这就是问题出在 IRC 上的 RFC 手册并没有真正的硬性限制的地方,所以我认为我必须设置某种频道的软性限制,让他们加入哪个频道。

加入 #foobar ;命令加入频道#foobar。

加入 #foo,#bar​​ ;加入频道 #foo 和 #bar 的命令。

这是可能的基本命令的两个示例。每个都不能有空格,频道由“,”分隔,频道必须以特殊字符“&”、“#”、“+”或“!”开头。

我不知道它是否会是我正在寻找的以下内容

"加入\s[(&|#|+|!)\w+][,(&|#|+|!)\w+]0-4"

如果我做得正确,我理解这个设置的方式是应该有一个通道,然后是 0 到 4 个其他通道,我觉得由于逗号而很容易解析和使用这些通道。有人可以告诉我这是否在正确的轨道上吗?

另外作为附加说明,在之前的命令中,我已经在参数方面测试了一个完全正确的命令,但只要在 JOIN 之后有一个空格,它就应该将其识别为命令,但可能只是参数不正确.我会假设上面的正则表达式是否正确,这样的事情可能是处理它的正确方法。

“加入?[\s[(&|#|+|!)\w+][,(&|#|+|!)\w+]0-4]"

我可能会走得更远,但是很多这些特殊符号会让人很困惑。

【问题讨论】:

您熟悉 reg101.com 网站吗?这是测试正则表达式的一个很好的方面。只看正则表达式很难调试。 @FrankYellin 你说的是 regex101.com 吗? 我做到了。打字不好。 *** 没有让我改正。该网站对您有帮助吗? @FrankYellin 它有点帮助,我了解到我必须将正则表达式的第一部分调整为 JOIN\s(&|#|\+|!)\w+ 但额外的可选通道用 a 隔开,还是让我很困惑 我想你也误解了如何使用[]。你不使用 | [] 内部,除非您实际上计划匹配 |。 [abc] 表示“a 或 b 或 c”。 [^abc] 表示除 abc 之外的所有内容。 [a-f] 表示 a,b,c,d,e,f。您需要注意 [] 中的 ^ 和 -,但其他所有内容都是字符。 【参考方案1】:

我想你正在寻找类似JOIN\s[&#+!]\w+(,[&#+!]\w+)0,4的东西

您的原件有几个问题。 [] 并没有完全按照你的想法去做, 语法中的分隔符是逗号,而不是连字符。

您是否有理由将自己限制在只有五个频道?

【讨论】:

如果你想知道真相,那是因为我想不出一种为我的服务器端接口动态创建通道的方法,我觉得虽然效率低下,但我还是坚持使用列表,因为尽我所能告诉它大多数人似乎在此类程序中跟踪用户组的方式。 还有评论的原始人给了我一个网站,在那里我可以做一些非常有用的正则表达式测试,我有一个朋友给我一些指示,我确实觉得有点愚蠢,没有意识到 [ ] 只是在您的列表中寻找一个字符,但没有意识到 () 可以用于更多的列表,例如 (&|#|\+|!)。既然您指出了这一点,我认为 [ \+!] 可能是一个更好更简单的选择。

以上是关于有人可以帮助我更好地理解正则表达式中的零或一,并可能在同一个正则表达式语句中嵌套另一个的主要内容,如果未能解决你的问题,请参考以下文章

通过例子学习正则表达式(基础部分)

这个正则表达式中的 (?i) 和 ?@ 是啥意思[重复]

寻找提示以更好地理解 Perl 兼容的正则表达式运算符和语法

有人可以帮助我使用.net中的正则表达式吗

老男孩带你了解perl正则表达式中的零宽断言

有人可以用我的正则表达式帮助我获取 html 代码中的文本吗? [复制]