【问题标题】:Need a regular expression for matching specific sentence format需要一个正则表达式来匹配特定的句子格式
【发布时间】:2010-10-10 12:02:56
【问题描述】:

我需要一个正则表达式来匹配一个非常具体的句子格式。格式如下:

word(可以包含,()[]&^%# and whitespace),word(可以包含,()[]&^%# and whitespace),word(可以包含,()[]&^%# and whitespace

所以基本上它是一个词、词、词,但每个词都可以包含一些特殊字符和空格。有人可以帮帮我吗?


这些是例子:

  1. 各种艺术家,共6个,我建 这座城市 (Michael Mayer Mix)
  2. 艾达, Blindhouse/Luckycharm, Luckycharm
  3. Hector, Orale, Orale (Alex Picone 混音)

【问题讨论】:

  • 对您来说,什么是“词”?仅小写字母字符?单词往往不包含空格...
  • 好吧,你是对的——那就是句子、句子、句子。它们可以是小写和大写。
  • 我认为您的模式没有被清楚地描述。也许你可以发布一个例子。
  • @Pavel:那我猜你想要的和一个句子完全一样......除非这三个句子必须以某种方式分隔
  • 句子是用逗号分隔的吗?

标签: php javascript regex


【解决方案1】:

我会使用这个解决方案:

/(?x)([a-z\\d\\s()[\\]&^%#\\/]+),((?1)),((?1))/i

这样你就不必重复你的模式了。

Code on ideone

【讨论】:

  • 那不是只有在第一个单词重复三遍的情况下才有效吗?
  • @Nev Stokes,而不是(参见 ideone 上的代码)它使用子模式。不是\1
  • +1 对我来说是新手。你能提供参考吗? (仅在手册中找到\1。)
  • 谢谢,感谢您的链接。似乎还有很多我不知道的关于 PCRE 的内容,并且没有在 php.net 上记录。再次感谢。
【解决方案2】:

我不确定您是否要包含在允许的模式中分隔句子的,。如果你确实想匹配一个句子三遍:

/^[a-z()[]&^%#\s]+,[a-z()[]&^%#\s]+,[a-z()[]&^%#\s]+$/i

【讨论】:

  • 我刚刚注意到您的第二个示例中有一个 / 与您定义的模式不匹配。
  • 不需要转义所有这些字符;在字符类中,只有 \‍](取决于位置还有 ^-)是需要转义的特殊字符。所以[a-z()[\\]&^%#\s] 就足够了。
  • 此外,您应该允许数字。使用a-z0-9 或者更好的\w
猜你喜欢
  • 2016-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-22
  • 2010-09-23
  • 1970-01-01
  • 2011-07-30
相关资源
最近更新 更多