2008-11-16 28 views
1

的微调我已经得到了正则表达式这是正常的,但因为它camed出不工作在一些情况以及我有问题,正则表达式

保持关注消息预览原因邮件编辑器做一些棘手的事情 “\”

[\ [] [\ ^%#\ $ \ * @ \ - ;] * [\ ^%#\ $ \ * @ \ - 。?] [ \]]

它的任务是找到一般看起来像那样的图案

[ABA]

  • A - 炭起订^,%,#,$,*,@, - ,;
  • 乙 - 一些文本
  • [和]包括在图案

有望找到这种模式出现的所有测试串

黑狐[#SAMPLE1#] [% sample2%] - [#sample3#]吃块。

但不是比赛的期望列表

  • “[#SAMPLE1#]”
  • “[%SAMPLE2%]”
  • “[#样品3#]”

我得到这个

  • “[#sample 1#]”
  • “[%SAMPLE2%]”
  • “ - [#样品3#]”

它似乎也会发生在其他集字符这个问题 “A”。那么有人可以建议对我的正则表达式进行更改以使其正常工作吗?

,并不太重要的事情,如何让我的正则表达式来排除模式看起来像

[ABC]

  • A - 从集合^,%,#,$字符,*,@, - ,;
  • 乙 - 一些文本
  • c - 从中​​集字符^,%,#,$,*,@, - ,; 比A
  • [和]被包括在图案

例如

[$ SAMPLE1#] [%SAMPLE2 @]其他[%样品3;]

在此先感谢

MTH

+0

我刚刚添加了正则表达式来检测ABA和ABC:你能证实他们为你工作吗? – VonC 2008-11-16 09:07:04

回答

3
 
\[([%#$*@;^-]).+?\1\] 

应用于文本:

 
Black fox [#sample1#] [%sample2%] - [#sample3#] [%sample4;] eats blocks. 

比赛

  • [#sample1#]
  • [%sample2%]
  • [#sample3#]
  • 但不[%sample4;]

编辑

这对我的作品(如预期输出,如预期由C#所接受的正则表达式):

Regex re = new Regex(@"\[([%#$*@;^-]).+?\1\]"); 
string s = "Black fox [#sample1#] [%sample2%] - [#sample3#] [%sample4;] eats blocks."; 

MatchCollection mc = re.Matches(s); 
foreach (Match m in mc) 
{ 
    Console.WriteLine(m.Value); 
} 
+0

是的,但是如果不使用前瞻,你会如何检测ABC? [^ \ 1]不起作用... – VonC 2008-11-16 09:27:14

1

为什么第一个“?”在“[[]?”中

\[[\^%#\$\*@\-;].*?[\^%#\$\*@\-;]\] 

会检测你的不同的字符串就好

为了更精确:

\[([\^%#\$\*@\-;])([^\]]*?)(?=\1)([\^%#\$\*@\-;])\] 

将检测[ABA]

\[([\^%#\$\*@\-;])([^\]]*?)(?!\1)([\^%#\$\*@\-;])\] 

将检测[ABC]

+0

好吧,我做了这么多的改变,我错过了这个 – MoreThanChaos 2008-11-16 09:04:21

1

你h AVE开口方括号的一个可选的匹配:

[\]]?

对于你的第二部分的问题(并可能简化)试试这个:

\ [\%[^ \%] + \%\] | \ [\#[^ \#] + \ #\] | \ [\ $ [^ \ $] + \ $ \]

在这种情况下,存在对于每个可能的定界符的子图案。 |字符是“OR”,所以如果3个子表达式中的任何一个匹配,它就会匹配。

每个子表达式将:

  • 开放托架
  • 特殊字符
  • 一切不是一个特殊字符(1)
  • 特别炭
  • 结算斗提

(1)可能需要添加额外的排除项,如']'或'[',所以我t不与意外在大型体匹配诸如文本:

[%MyVar的#]等等等等[$ OtherVar%]

罗布