我有一个几乎按预期工作的.Net正则表达式(应该匹配特定标识符键之后的值,后跟括号内的一组可选的空白分隔值,请参阅http://regex101.com/r/yW4aZ3/113),但它也匹配一点松散。
基本上它只应匹配如果匹配和optional()后跟输入的结尾,一个或多个空格或换行符。
使用的正则表达式是:
^Identifier ([a-zA-Z0-9-_]+)(?:\(([^)(]*)\))?
样本是:
Identifier abc sdfadf << should match 'abc'
Identifier a_123bc(def) << should match 'a_123bc' and 'def'
Identifier abcdef~ << does match but should NOT match because 'abcdef' is not followed by either line end, whitespace(s) or newline(s)
有没有人知道如何正确地执行上述示例?
答案 0 :(得分:0)
尝试使用正向前瞻(有关详细信息,请参阅此示例article)。例如,如果我们在正则表达式的末尾添加(?=\s|$)
,它将仅匹配字符串后跟空格或字符串结尾,但不匹配此空格:
^Identifier ([a-zA-Z0-9-_]+)(?:\(([^)(]*)\))?(?=\s|$)
答案 1 :(得分:0)
^Identifier ([a-zA-Z0-9-_]+)(?:\(([^)(]*)\))?
决赛?说零或一次,因此这将匹配任何
^Identifier ([a-zA-Z0-9-_]+)
会匹配。
听起来像你想要的那样:
^Identifier ([a-zA-Z0-9-_]+)(?:\(([^)(]*)\))?(?=[\s$])
最后的(?=[\s$])
表示行尾或空白作为正向前瞻