【问题标题】:Regex for match a textual file正则表达式匹配文本文件
【发布时间】:2017-01-28 15:01:05
【问题描述】:

我必须创建一个正则表达式来匹配一个文件的内容,但我有一个问题。 在这个文件中,我控制每一行都有这条指令:

i=数字 j=数字 k=数字 u=数字

但困难在于我也必须正确匹配

j=数字 i=数字 u=数字 k=数字

以及 i、j、k 和 u 的任何处置。 如何为所有情况创建一个正则表达式? 请注意,在同一行上不能有任何 i,j,k,u 的成熟。 谢谢。

【问题讨论】:

  • 您的尝试有什么问题?

标签: java regex file


【解决方案1】:

(([ijku]=)(?!.*\\2)number(?:\\s(?=\\w)|$)){4} 将为您工作。这也可以处理重复情况。

public static void main(String[] args){
    String s = "i=number j=number k=number u=number";
    System.out.println(s.matches("(([ijku]=)(?!.*\\2)number(?:\\s(?=\\w)|$)){4}"));
    s = "u=number j=number k=number i=number";
    System.out.println(s.matches("(([ijku]=)(?!.*\\2)number(?:\\s(?=\\w)|$)){4}"));
    s = "u=number j=number k=number u=number";
    System.out.println(s.matches("(([ijku]=)(?!.*\\2)number(?:\\s(?=\\w)|$)){4}"));
}

O/P:

true
true
false

【讨论】:

  • 谢谢 ;) 但我不明白这一点: (?!.*\\2) 。它是什么?你能给我解释一下吗?谢谢
  • @Antonio1996 这是一个backreference 到第二个capturing group 用于通过否定检查lookahead 没有i=...i=... 您还可以要求分离通过例如正则表达式的空格,例如:(?:(?:([ijku])(?!.*?\1=)=number) ){3}[ijku]=number
  • @Antonio1996 - 是的,就像 bobble 所说,\\2 意味着它是对第二个捕获组的 反向引用,即 @ 之间的值987654332@s。用于检查String中是否有重复的<ijku>=
  • @bobblebubble - 编辑我的答案以确保不匹配以空格结尾的字符串。
【解决方案2】:

你正在寻找的是所谓的字符类:

[ijku]=number [ijku]=number [ijku]=number [ijku]=number

【讨论】:

  • 它仍然匹配i=number i=number...等
  • 您应该澄清这是否仅用于验证或匹配。 @Antonio1996
  • 在这种情况下,您应该遵循@TheLostMind 的回答。就是这样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-15
  • 2013-02-11
  • 1970-01-01
相关资源
最近更新 更多