【发布时间】:2016-02-04 12:59:20
【问题描述】:
我正在尝试编写一个可以提取命令的正则表达式,这是我目前使用否定后向断言得到的结果:
\b(?<![@#\/])\w.*
所以输入:
/msg @nickname #channel foo bar baz
/foo #channel @nickname foo bar baz
foo bar baz
foo bar baz 每次都被提取。查看工作示例
https://regex101.com/r/lF9aG7/3
但是在 Go 中这不会编译 http://play.golang.org/p/gkkVZgScS_
它抛出:
panic: regexp: Compile(`\b(?<![@#\/])\w.*`): error parsing regexp: invalid or unsupported Perl syntax: `(?<`
我做了一些研究,发现该语言不支持负向回溯以保证 O(n) 时间。
我怎样才能重写这个正则表达式,以便它在没有负面后视的情况下做同样的事情?
【问题讨论】:
-
(?:^|[^@#/])\b(\w.*)怎么样? -
你能举一个你想要输出的例子吗?
-
在“foo \msg some stuff @name other stuff #chan blah blah”的情况下应该怎么做?
-
@MayurKoshti 操场链接显示预期输出,给定各种输入。
-
我在下面更新了我的回复,以使用字符串过滤而不是正则表达式。当然,这只有在 您要过滤掉所有以
[#@/]中的字符开头的单词时才有效。