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

Jin*_*ANG 1 regex

前几天我正在进行正则表达式高尔夫,任务是在不使用的情况下匹配字符串末尾的'u' $.目标是匹配"fu","豆腐"和"snafu",但不是"futz","fusillade","functional"或"discombobulated".

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

ken*_*ytm 8

您可以在/sf/answers/1606085281/中找到可用的正则表达式元素列表.有些你可以尝试通过RegexGolf测试:

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

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