正则表达式查询帮助 - Lookbehind

问题描述:

这与一些有关:Regular Expression - Formatting text in a block - IM但有一个不同的问题。正则表达式查询帮助 - Lookbehind

寻找-的文字换行符合下列条件:

条件:

  • 令牌可以在启动或行尾
  • 令牌必须由空格或一个或多个被包围符号:{。,!@#$ ....}。
    • 一定不能是包含-对的正常字符[a-zA-Z]。
    • 看样测试3 ... W-感谢你 -
    • 测试4和5成功,因为-是包裹着[^ A-ZA-Z]
  • 令牌不能跟一个在第一-或空间之前的最后-
    • 的空间“-Wow - ”将不会是一个匹配作为闭合-用空间之前。
    • 见样本测试6和7

对于正则表达式的前我需要:(^|[\s\W]+)
和端将是:($|[\s\W]+)

我有当前的表达,但由于逃生条件在找到第一个后停止,故障是失败的-

(^|[\s\W]+)-([^\s][^-]*)-($|[\s\W]+) 

样品测试字符串是:

  1. (全部):-Wow-thank you-.
  2. (WOW):-Wow- thank you-!
  3. (NIL):- Wow-thank you-.
  4. (谢谢):- Wow!-thank you-
  5. (感谢你):- Wow -thank you-
  6. (全部):-Wow - thank you-
  7. (N IL):-Wow - thank you -

这是否需要看后面? (我是一个正则表达式的新手,所以请忍受我)或者是我的中间状况完全错误。

谢谢你!
mwolfe。

+0

我不明白你的第一条评论后你的第二个条件。 – 2013-03-08 06:52:47

+1

由于在“-thank you-”之前有一个字符“w”,因此示例3失败。如果该字符是空格或符号,那么“感谢您 - ”将被识别/标记/找到。这就是为什么Example 4工作的原因,因为“ - ”之前的字符是“!” – 2013-03-08 06:56:31

+1

+1 - 非常好的尝试,特别是对于(自称)新手。 – 2013-03-08 07:16:14

尝试一个更简单的中间表达式。

(^|[\s\W]+)-(.*?)-($|[\s\W]+) 
      ^^^ 

非贪婪通配符匹配将捕获所需的最小字符串匹配以下-($|[\s\W]+)


编辑。好吧,我明白为什么这是错的。你希望一个非空格字符能够立即跟随并分别成功打开和关闭破折号。所以试试这个:

(^|[\s\W]+)-(\S.*?\S)-($|[\s\W]+) 
      ^^ ^^ 
+1

方式更好。但它没有捕获测试#6 – 2013-03-08 07:18:09

+1

你确定?适用于我:http://rubular.com/r/xhXidunhmF。除非我误解你的例子。 (^ | [\ s \ W] +) - [^ \ s](。*?)[^ \ s] - ($ | [\ s \ W] +) – 2013-03-08 07:20:41

+1

) !你在rubular上的链接在你的第一篇文章中更加先进。感谢您的光彩;一直在使用regex101.com – 2013-03-08 07:20:48