首页 > 解决方案 > 寻求帮助在java中编写REGEX

问题描述

我需要编写一个正则表达式来检查字符串中是否有 12 | (管道)和其他 13 个单词任何不带 | 的字符 管道(数字字母和特殊字符)。正则表达式的输入是:

00000003 | 1 | 1 |0 | 测试名称 | 主要@email.com | 街道 | 城市| 状态 | 邮政编码 | 英国 | 描述 | 30

我试图像这样构建它:

([A-Za-z0-9!"#$%&'()*+,./:;<=>?@\^_`{}~-])+(\|{1})+
([A-Za-z0-9!"#$%&'()*+,./:;<=>?@\^_`{}~-])+(\|{1})+
([A-Za-z0-9!"#$%&'()*+,./:;<=>?@\^_`{}~-])+(\|{1})+
([A-Za-z0-9!"#$%&'()*+,./:;<=>?@\^_`{}~-])+(\|{1})+
([A-Za-z0-9!"#$%&'()*+,./:;<=>?@\^_`{}~-])+(\|{1})+
([A-Za-z0-9!"#$%&'()*+,./:;<=>?@\^_`{}~-])+(\|{1})+
([A-Za-z0-9!"#$%&'()*+,./:;<=>?@\^_`{}~-])+(\|{1})+
([A-Za-z0-9!"#$%&'()*+,./:;<=>?@\^_`{}~-])+(\|{1})+
([A-Za-z0-9!"#$%&'()*+,./:;<=>?@\^_`{}~-])+(\|{1})+
([A-Za-z0-9!"#$%&'()*+,./:;<=>?@\^_`{}~-])+(\|{1})+
([A-Za-z0-9!"#$%&'()*+,./:;<=>?@\^_`{}~-])+(\|{1})+
([A-Za-z0-9!"#$%&'()*+,./:;<=>?@\^_`{}~-])+(\|{1})+
([A-Za-z0-9!"#$%&'()*+,./:;<=>?@\^_`{}~-])

但正则表达式不检查 12 个管道。另外,我尝试构建这个正则表达式

1) 
(?:[^|])([\|])
(?:[^|])([\|])
(?:[^|])([\|])
(?:[^|])([\|])
(?:[^|])([\|])
(?:[^|])([\|])
(?:[^|])([\|])
(?:[^|])([\|])
(?:[^|])([\|])
(?:[^|])([\|])
(?:[^|])([\|])
(?:[^|])([\|])
(?:[^|])




2)
(?:[^|])\|
(?:[^|])\|
(?:[^|])\|
(?:[^|])\|
(?:[^|])\|
(?:[^|])\|
(?:[^|])\|
(?:[^|])\|
(?:[^|])\|
(?:[^|])\|
(?:[^|])\|
(?:[^|])


3) (/|{12}) 

他们都没有为我工作。有什么建议吗?

标签: javaregex

解决方案


你应该使用这个:^(?:[^\|]+\|){12}[^\|]+$

如此正确地转义为 Java 字符串:String pattern = "^(?:[^\\|]+\\|){12}[^\\|]+$";

内容如下:

^: 从表达式的开头

(?:[^\|]+\|): 找一堆非|| 后跟一个 | . (?: 事情是针对非捕获组的。它告诉正则表达式引擎您实际上并不关心字段值,只是它就在那里。这是一种优化。

{12}: 正好 12 次

[^\|]+: 那么最后一个第 13 场非|

$: 到那时你应该到达表达式的结尾

实际示例:https ://www.regexplanet.com/share/index.html?share=yyyydfv274d

我相信你已经知道了,但为了完整起见,这里是 Java 中的所有正则表达式标记及其含义: https ://docs.oracle.com/javase/7/docs/api/java/util/regex/模式.html


推荐阅读