正则表达式匹配单行文本,但不匹配多行文本?

时间:2016-02-25 14:50:24

标签: c# regex

我有一些与FastColoredTextBox控件一起使用的正则表达式,用于标识需要在TextStyle事件上设置TextChanged的文本。我特别难以识别此正则表达式的问题。

@"(^STEP\s|^\s+STEP\s)(.*)$"

在我的语言中,我有一个命令STEP,它有一个参数,参数是有效的String(步骤名称)。在我的编辑器和解析器中,如果命令在它自己的行上,前面有0-N个空格字符,后跟一个空格,后跟有效字符串,后面跟着行的末尾,则只能解析该命令。 p>

我的问题是上面的正则表达式与所有难以定义的实例都不匹配(正则表达式令人困惑)。例如,将以下文本粘贴到我的编辑器中会导致步骤名称被正确突出显示

STEP My Special Step Name 

认为此文本导致其未突出显示

STEP My Special Step Name 
    // Comment

与此同时

//Comment
STEP My Special Step Name 

据我所知,我试图匹配的文本是否包含新行,但它不匹配。我必须假设我使用锚点(?)^$是问题,但我不知道它们如何匹配行的起始端?

我最初开始使用正则表达式来尝试匹配换行符,但它很快就被证明是不可理解的。我偶然发现了^$,并决定它们会运作良好,但我猜我错了?

1 个答案:

答案 0 :(得分:1)

尝试在模式中使用多线模式:

(?m)(^STEP\s|^\s+STEP\s)(.*)$

MSDN RegEx Multiline Reference