有人可以帮助我更好地理解正则表达式中的零或一,并可能在同一个正则表达式语句中嵌套另一个
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
的东西
您的原件有几个问题。 []
并没有完全按照你的想法去做, 语法中的分隔符是逗号,而不是连字符。
您是否有理由将自己限制在只有五个频道?
【讨论】:
如果你想知道真相,那是因为我想不出一种为我的服务器端接口动态创建通道的方法,我觉得虽然效率低下,但我还是坚持使用列表,因为尽我所能告诉它大多数人似乎在此类程序中跟踪用户组的方式。 还有评论的原始人给了我一个网站,在那里我可以做一些非常有用的正则表达式测试,我有一个朋友给我一些指示,我确实觉得有点愚蠢,没有意识到 [ ] 只是在您的列表中寻找一个字符,但没有意识到 () 可以用于更多的列表,例如 (&|#|\+|!)。既然您指出了这一点,我认为 [ \+!] 可能是一个更好更简单的选择。以上是关于有人可以帮助我更好地理解正则表达式中的零或一,并可能在同一个正则表达式语句中嵌套另一个的主要内容,如果未能解决你的问题,请参考以下文章