【问题标题】:regex matching "not anything of two characters"正则表达式匹配“不是任何两个字符”
【发布时间】:2012-05-17 01:59:12
【问题描述】:

这就是我想要做的:

文字: -一oneitis -二+三+四+五-六-七-八-九然后十一+十二十三

我要匹配:

  1. -one oneitis
  2. -两个
  3. +三个
  4. +四个
  5. +五个
  6. -六七八
  7. -九点十一点
  8. +十二十三

基本上,忽略单词中匹配的“-”,但如果存在则匹配“+”和“-”

这是我正在使用的正则表达式:/([-+][^+]+)/

我想做 [^(+)&(-)]+

或者,匹配任何不是'+'也不是'-'

有没有办法做到这一点?

提前致谢! (链接一些工具http://rubular.com/)

【问题讨论】:

  • 即使不是作业,但规则显然比“基本忽略匹配+单词内”要复杂。而且您没有充分限制您的问题,因此我们可以从您的示例中猜出的任何一组规则都可能是错误的。我建议您坐下来准确定义您的匹配规则是什么。到那时,您甚至可能不再需要我们的帮助了。
  • 不幸的是,它不是...我喜欢家庭作业...
  • 基本上,我想要“介于”文本/数据之间。一个在“+”和“-”之间,但“-”除外,如果它被字符包围。 “-”没问题

标签: regex pattern-matching


【解决方案1】:

解决方案。

    ([-+](?:[^ ][-]|[ ][^-+]|[^ +-])+)

http://rubular.com/r/fTSm0pjvEX

【讨论】:

  • 换句话说,使用交替运算符作为你的“逻辑门”。
【解决方案2】:

一种选择是用\+|\B-分割:http://rubular.com/r/tC2zTWZI4v

每个+ 和- 在空格(或任何非字母数字字符)之后的拆分。

这意味着它在某些情况下不会被拆分,例如+a b-c不会被拆分。

如果你确实想匹配你的单词,并且想在这种情况下拆分,你可以尝试:

[+-]([^\s+]*[^+-]*)

http://rubular.com/r/TqQEAoJ2Yv

【讨论】:

  • 感谢 Kobi,但我一直在寻找不分割的匹配单词。我遇到了与标志相结合的单词匹配问题。我现在得到了答案,但无论如何谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-22
  • 1970-01-01
  • 2015-09-30
  • 2013-08-02
  • 1970-01-01
  • 1970-01-01
  • 2017-08-31
相关资源
最近更新 更多