【问题标题】:How can I exclude some characters from a class?如何从类中排除某些字符?
【发布时间】:2010-08-23 15:17:33
【问题描述】:

假设我想匹配一个“单词”字符(\w),但排除“_”,或者匹配一个空白字符(\s),但排除“\t”。我怎样才能做到这一点?

【问题讨论】:

  • 为了其他可能正在使用 Java、.NET、XML 模式或 JGSoft/RegexBuddy 的人的利益,这些风格实际上有一个字符减法机制:stackoverflow.com/questions/3201689/…;例如.NET 中的[a-z-[aeiou]] 匹配小写辅音。

标签: regex perl character-class


【解决方案1】:

使用包含 \W 或 \S 的否定类。

/[^\W_]/  # anything that's not a non-word character and not _
/[^\S\t]/ # anything that's not a non-space character and not \t

【讨论】:

  • +1 我称这种技术为double-negative
  • @ThomasGuyot-Sionnest 做加号很容易; [/[:graph:]]。但/ 已经在图中。也许你的意思是减去 / 字符? [^/[:^graph:]] 可能会为此工作;不确定 git 使用的是什么正则表达式引擎
  • @ysh TBH 我什至无法理解我上面写的内容 - 显然这并不容易,但我不完全记得我在挣扎什么。我将删除该评论。我记得我找到了一个解决方案,但必须回头看看我做了什么...... IIRC 它使用了cntrl 类。
  • 我终于检查了...我的用例是在做一个 git word diff,我可以看到单个路径组件的变化(比较两个构建日志和轻微的路径修改),我不确定我尝试了什么,但很可能一开始我什至没有尝试正确的事情。看来--word-diff 的默认正则表达式是[^[:space:]]+(我没有看到使用它与普通--word-diff 的差异)并且也拆分路径我刚刚添加了/,所以git diff '--word-diff-regex=[^[:space:]/]+' [...]
猜你喜欢
  • 1970-01-01
  • 2020-01-04
  • 1970-01-01
  • 2012-10-11
  • 1970-01-01
  • 2015-10-28
  • 2012-12-28
  • 1970-01-01
相关资源
最近更新 更多