2017-04-15 161 views
0

我有一个像这样的字符串./this-needs-to-be-matched/knownstring/endofstring匹配包含已知字符串的整个字符串

我总是知道endofstring是11个字符长

我已经使用这个直到我意识到 - 号将不匹配

\w+\/knownstring\/\w{11} 

现在我真的不知道该怎么匹配任何字符,包括减号。

结果应该是:结果应该是:this-needs-to-be-matched/knownstring/endofstring

我也曾尝试:

\.\/.*\/knownstring\/\w{11} 

而且不同的其他的变化,所以我卡住了。

+0

什么语言(JavaScript的?) – Bohemian

回答

1

添加-到允许的字符列表:

^\.\/[\w-]+\/knownstring\/\w{11}$ 

或只是 “没有一个斜杠”:

^\.\/[^\/]+\/knownstring\/\w{11}$ 
+0

有趣的方法,didn;吨知道你可以添加字符到允许的字符的列表,老实说,第二种方法它仍然不清楚。你匹配./和“不是斜线”之间的任何内容? – faceoff

+0

为了记录,我设法自己提供了一个解决方案'[a-zA-Z0-9 + - ] + \/knownstring \/\ w {11}' – faceoff

+0

'[^ \ /]'意思是“斜线“。 '^'*否定字符类。顺便说一句,除非你使用JavaScript,红宝石或其他语言,使用正斜杠分隔正则表达式,正斜线不需要转义 – Bohemian

0

我认为\.\/.*\/knownstring\/\w{11}实际上应该工作,这到底是什么错误?

如果endofstring需要完全匹配11个字符,且不再需要,则可以添加字边界符号\b

\.\/.*\/knownstring\/\w{11}\b

您可以测试这个here

+0

因为在这两种情况下,它贪婪匹配如果我有另一个**。/ **在我的字符串的某个地方,它将匹配所有 – faceoff