试图了解匹配的内容

时间:2015-06-03 13:13:21

标签: regex

我有以下字符串

rule[param,argument]

但它可以只是

rule

我试图在没有方括号和逗号的情况下得到所有单词。

/([\w]+)(\[\s([a-zA-Z\d_]+,?)*\])?/

正则表达式就像一个魅力,但我无法弄清楚为什么需要\ s才能匹配单独的单词,而不是字符串整体。 据我所知,\ s匹配任何空格字符,它等于[ \t\n\r\f\v],但我在问题字符串中没有任何这些字符。 你能解释为什么需要\s吗?

我正在使用php和javascript测试代码,结果是一样的。

2 个答案:

答案 0 :(得分:1)

在上面的示例中,匹配仅由此[\w]+正则表达式完成,而不是由第二个捕获组内的模式完成,因为您将第二个组作为 的可选的

您可以通过运行([\w]+)(\[\s\t\t\t\t\t\t\t\t\t\t\t\t\t([a-zA-Z\d_]+,?)*\])?正则表达式来检查它。

DEMO

答案 1 :(得分:1)

正则表达式的第二部分不对您获得的匹配负责......它们与([\w]+)匹配

[ ]内的字符串模式未获得匹配,因为您包含了字符串中不存在的\s,并且您通过?

使模式可选

请参阅DEMO