簡體   English   中英

Java 正則表達式與輸入不匹配

[英]Java regular expression does not match the input

我對正則表達式有疑問。 我想用可以包含以下之一的參數解析 url :

  • 名字: ar ,姓氏:史密斯,
  • 名字: ar ,姓氏:smith,添加時間<2020-03-15,
  • 名字: ar ,姓氏:smith,電話:123456789,
  • 名字: ar ,姓氏:smith,email:email@email.com,

每個鍵值必須以逗號(,)結尾

我有一個這樣的正則表達式:

  • Pattern pattern = Pattern.compile("(\\w+?)(:|<|>)(\\p{Punct}?)((\\w+?)|((\\d{4}-\\d{2}-\\d{2})?+))(\\p{Punct}?),");
  • Pattern pattern = Pattern.compile("(\\w+?)(:|<|>)(\\p{Punct}?)[a-zA-Z](\\p{Punct}?),");

但除第一種情況外,它不適用於上述輸入。

請關於如何正確構建模式的一些建議。

您所擁有的是逗號分隔、冒號分隔的鍵值對。 除非某些要求迫使您使用正則表達式,否則根據您的評論它不會,將值拆分為逗號,然后將結果數組的值拆分為冒號。 你最終會得到一個 arrays 數組,索引 0 是鍵,索引 1 是值。

在以下示例中,使用 OP 中提供的值之一,我們在逗號上拆分並循環遍歷生成的數組,拆分冒號上的每個索引,並在每次迭代時將其添加到列表中。

String value= "firstName:ar,lastName:smith,email:email@email.com,"
Map<String,String> keyValuePairs = new HashMap<>();
for (String kvp : value.split(",")) {
  String[] kvp = kvp.split(":");
  if (kvp.length != 2 || kvp[0].isEmpty()) {
    continue; //ignoring incorrectly formatted kvp
  }
  keyValuePairs.add(kvp[0], kvp[1]);
}
// do what you want with keyValuePairs;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM