【问题标题】:Regular Expression to validate a string containing '=' and '~' as end character [closed]正则表达式验证包含“=”和“~”作为结束字符的字符串[关闭]
【发布时间】:2020-06-25 08:50:18
【问题描述】:

在 Java 中,我必须使用 RegEx 验证最后包含“~”和“=”的字符串。

例如:

LOCKER=2004-02-23-23.28.22.377655~UCC=0103207031~URY=31/12/9999~URF=23/02/2004~URT=SEREST ISSY LES MO      ~URFC=XX~URFNUMCB=XXXXXXXXXXX~CEB=XXXXX~CEBC=XXXXX~URFN=0001

此字符串格式为KEY1=VALUE~KEY2=VALUE~KEYN=VALUE大写

'~' 作为分隔符

目前,我正在使用一些正则表达式,但它们都是错误的 谁能帮帮我?谢谢你的进步

【问题讨论】:

  • ~ 真的属于值本身,还是只是某种分隔符?
  • @QBrute 其所属值
  • 我的意思是 '~' 属于字符串作为分隔符字段 KEY=VALUE~KEY2=VALUE~KEYN=VALUE
  • 如果是分隔符,为什么需要正则表达式?您可以执行类似myString.split("~") 之类的操作,然后将所有键值对作为一个数组获取,然后您可以分别对其进行验证。
  • “目前,我正在使用一些正则表达式”告诉我们你有什么。

标签: java regex spring-boot


【解决方案1】:

以下正则表达式应该这样做:

^(?!~)(?:(?:^|~)[^=~]+=[^=~]*)+$

解释

^            Match beginning-of-input, i.e. matching must start at beginning
(?!~)        Input cannot start with `~`
(?:          Repeat 1 or more times:
  (?:^|~)      Match beginning of input or match '~', i.e. match nothing on
               first repetition, and match `~` on each subsequent repetition
  [^=~]+       Match KEY
  =            Match '='
  [^=~]*       Match VALUE (may be blank)
)+
$           Match end-of-input, i.e. matching must cover all input

如果 KEY 和 VALUE 有更多限制,请根据需要更改它们的字符类,例如如果 KEY 必须是仅大写的标识符,请使用 [A-Z][A-Z0-9]* 而不是 [^=~]+

如果将 Java 的 matches() 与正则表达式一起使用,则第一个 ^ 和结尾 $ 是多余的。第二个^ 仍然是必需的。

【讨论】:

  • 正则表达式中美元符号前的字符:不应该是加号而不是星号吗?我不认为匹配一个空字符串是可以的。
  • @Chaarmann 可能没问题,但您可能是对的。答案已更新。
猜你喜欢
  • 2020-03-17
  • 1970-01-01
  • 2014-07-06
  • 1970-01-01
  • 2011-06-27
  • 2018-10-10
  • 1970-01-01
  • 1970-01-01
  • 2011-07-22
相关资源
最近更新 更多