【发布时间】:2019-12-16 09:19:36
【问题描述】:
我正在尝试创建一个以“WORD”开头并匹配除原始“WORD”之外的所有字母、数字和字符的模式,直到“ENDWORD”为止。
在这个例子中,我希望它匹配“WORD”的第二次出现并匹配到“ENDWORD”;但是,它从第一次出现开始,并没有正确排除“WORD”的第二次出现。
看起来好像这个技巧可以匹配除“WORD”之外的任何字符。下面的示例使用了一个否定的前瞻,它被前面的“。”否定。 (任何),但我不确定如何将肯定的“任何”或换行符与否定词结合起来。任何帮助将不胜感激。
这是我在 LinqPad 中运行的示例 c# 程序。
void Main() {
var text =
@"WORD
[asdf] ---
123/\*&
WORD
[asdf] ---
123/\*&
ENDWORD
[asdf] ---
123/\*&";
var pattern = $"(WORD).|\\n\\b(?!WORD)\\b.|\\n*(ENDWORD)";
Regex rgx = new Regex(pattern);
foreach (Match match in rgx.Matches(text))
{
match.Dump();
}
}
另一种说明问题的方法是从“ENDWORD”开始(捕获它),回溯,忽略所有字符,直到找到第一次出现的“WORD”并捕获它。刚刚修改以澄清“ENDWORD”不是字符串的结尾。
【问题讨论】:
-
你是这个意思吗? Demo见ideone.com/v8H38G