【问题标题】:Regular Expression regexp - Character Range, word boundary, assertions正则表达式 regexp - 字符范围、单词边界、断言
【发布时间】:2012-12-26 06:28:42
【问题描述】:

一个非常快速的问题。

这是表达式:

/[a-zA-Z]{1,}/

我希望这个表达式只匹配那些字母。但它似乎也匹配“=”(等号)。我做错了吗?

例如:

/\B#{1}(__){1}(F|OB){1}_{1}([a-zA-Z]{1,})={1}\B/

这应该匹配:#__OB_someText= 问题是它也匹配这个:#__OB_someText== 或这个#__OB_someText====2 等号应该只出现一次。

我可能不太了解这些断言:\b \B

【问题讨论】:

  • 你的正则表达式没问题 - 你在用什么运行它?
  • hmmm.. M42 当然是正确的。如果您(捕获它),您的正则表达式将返回正确的匹配部分,但您实际上希望它 fail 如果 = 后面没有单词边界...
  • ...或者您是否打算在开头和结尾处使用 \b,单词边界?
  • 是的,有点。无论如何,这是一个糟糕的问题。我会自己解决的。
  • 这是一个不好的问题,因为我没有说出全貌。忘掉它。我只是想用那个等号来做一些事情。如果它在那里,它应该告诉一些东西。

标签: regex word expression boundary


【解决方案1】:

\B代表NON word boundary,==之间没有non-word-boundary

改用这个正则表达式:

/\B#(__)(F|OB)_([a-zA-Z]+)=[^=]/

{1}可以省略

{1,}+ 相同

[^=] 表示任何不是=的字符

【讨论】:

  • {1} 可以省略 - 可以。 {1,} 与 + 相同 - 我更喜欢这个 {1,}。 [^=] 表示任何不是 = 的字符 - 谢谢^^
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-29
  • 2011-04-14
  • 2011-03-28
  • 2020-09-06
相关资源
最近更新 更多