我正在为具有关键字和逗号(分隔)/分号(EOL)分隔值的文件编写语法检查器(在 Java 中)。两个完整结构之间的空间量未指定。
需要什么:
在多行文件中查找任何重复的单词(连续和非连续)。
// Example_1 (duplicate 'test'):
item1 , test, item3 ;
item4,item5;
test , item6;
// Example_2 (duplicate 'test'):
item1 , test, test ;
item2,item3;
Run Code Online (Sandbox Code Playgroud)
我尝试应用该(\w+)(s*\W\s*\w*)*\1模式,但该模式无法正确捕获重复项。
您可以将此正则表达式与模式DOTALL(单行)一起使用:
(?s)(\b\w+\b)(?=.*\b\1\b)
Run Code Online (Sandbox Code Playgroud)
正则表达式详情:
(?s): 启用DOTALL模式(\b\w+\b):匹配一个完整的单词并在第 1 组中捕获它(?=.*\b\1\b): Lookahead 断言我们在前面\1某处存在反向引用。\b用于确保我们再次匹配完全相同的单词。此外:
根据下面之前的评论,如果意图不匹配像 那样的连续单词重复item1 item1,则可以使用以下正则表达式:
(?s)(\b\w+\b)(?!\W+\1\b)(?=.*\b\1\b)
Run Code Online (Sandbox Code Playgroud)
这里有一个额外的否定前瞻断言,以确保我们不匹配连续的重复。
(?!\W+\1\b):连续重复失败的负前瞻。| 归档时间: |
|
| 查看次数: |
768 次 |
| 最近记录: |