正则表达式匹配字符串的结尾而不使用`$`

时间:2017-04-11 08:22:28

标签: regex

前几天我做了regex golf,任务是在字符串末尾匹配'u'而不使用$。目标是匹配“fu”,“豆腐”和“snafu”,但不是“futz”,“fusillade”,“functional”或“discombobulated”。

我想出了fu[^tsn]regex101;然而,它没有通过测试,因为它由于某种原因不匹配任何“fu”,“豆腐”和“snafu”。我想知道为什么它不起作用,如果有一种更聪明的方法可以解决这个问题(奖励:有没有使用$的现实生活情况会更好)。

1 个答案:

答案 0 :(得分:8)

您可以在https://stackoverflow.com/a/22944075/224671中找到可用的正则表达式元素列表。有些你可以尝试通过RegexGolf测试:

  • \b:匹配单词边界,假设输入始终是单个单词
  • \z\Z:匹配字符串的结尾(注意:JavaScript不支持)
  • (?!.):负面预测,只要没有下一个字符就匹配,语义上等同于$

你的正则表达式工作的原因"在regex101中,因为[^tsn]fu旁边的换行符匹配。但是在RegexGolf中它期望fu成为整个输入,因此匹配失败。因此在使用regex101进行测试时要小心。也许最好切换到"单元测试"在你的情况下模式。