c# - 为什么以下正则表达式与此文本匹配?

标签 c# regex parsing

我有正则表达式:(?ms)(?<attribute>\[.+?\]|public|private|\s)+?class

我有文字:

[attribute]
public int a;

[attribute C]
[attribute B]
public class Test{

}

我想知道为什么我发布的正则表达式匹配:

[attribute]
public int a;

[attribute C]
[attribute B]
public class

我认为它应该匹配:

[attribute C]
[attribute B]
public class

如果我错了,请纠正我。我认为正则表达式的读取方式是:

Find either an attribute ( [ some attribute ] ) or public key word or private keyword or space.

因此,正则表达式引擎首先应匹配 [attribute],然后是 '\n'(换行),然后是 public关键词。在这些之后,关键字 int不是一个选项,那为什么它会匹配它呢?

最佳答案

问题是您使用的点可以匹配任何内容,包括右方括号、空格和(在单行模式下)换行符:

\[.+?\]

你应该使用这个:

\[[^\]]+\]

说明:

\[     Match a literal open square bracket.
[^\]]  Match any character except a close square bracket.
+      One or more.
\]     Match a literal close square bracket.

关于c# - 为什么以下正则表达式与此文本匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11660614/

相关文章:

objective-c - Gpx 解析器或 GPX 文档

c# - 在Asp.net MVC Controller 上执行异步OnAction

c# - 如何在一个 IEnumerable 上同时运行两种方法

c# - 后台任务 UWP Windows 10 中的 Websockets

c# - CLR 如何解释以下 LINQ 查询

PHP正则表达式将嵌套()替换为[]

java - 在 Struts2 中验证整数值?

c++ - 使用 boost::spirit 的简单表达式

javascript 条件运算符格式文本

java - 如何将 Python Script(py) 文件解析为 Java POJO?