我有正则表达式,但是因为它出来在某些情况下效果不佳
留意消息预览原因消息编辑器使用“\”执行一些棘手的操作
[\ [] [\ ^%#\ $ \ * @ \ - ;] * [\ ^%#\ $ \ * @ \ - ;?] [\]]
它的任务是找到一般看起来像
的模式[ABA]
预计会在测试字符串
中找到此模式的所有出现黑狐狸[#sample1#] [%sample2%] - [#sample3#]吃块。
但不是预期的匹配列表
我明白了
似乎这个问题也会在集合“A”中与其他字符一起出现。那么有人可以建议改变我的正则表达式以使其按我的需要工作吗?
并且不太重要的是,如何使我的正则表达式排除看起来像
的模式[ABC]
例如
[$ sample1#] [%sample2 @] [%sample3;]
提前致谢
MTH
答案 0 :(得分: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);
}
答案 1 :(得分:1)
为什么第一个“?”在“[[]?”
\[[\^%#\$\*@\-;].*?[\^%#\$\*@\-;]\]
会检测到你的不同字符串
更确切地说:
\[([\^%#\$\*@\-;])([^\]]*?)(?=\1)([\^%#\$\*@\-;])\]
将检测[ABA]
\[([\^%#\$\*@\-;])([^\]]*?)(?!\1)([\^%#\$\*@\-;])\]
将检测[ABC]
答案 2 :(得分:1)
您可以选择开头方括号:
[\]]
对于你问题的第二部分(也许是简化),试试这个:
\ [\%[^ \%] + \%\] | \ [\#[^ \#] + \#\] | \ [\ $ [^ \ $] + \ $ \]
在这种情况下,每个可能的分隔符都有一个子模式。 |字符是“OR”,因此如果3个子表达式中的任何一个匹配,它将匹配。
每个子表达式都将:
(1)可能需要添加额外的排除,例如']'或'[',因此它不会意外地匹配大量文本,如:
[%MyVar#] blah blah [$ OtherVar%]
罗布