我想用正則運算式驗證輸入欄位的語法。該欄位應接受類似于以下示例的文本:
Something=Item1,Item2,Item3
someOtherThing=Some_Item
必須有一個單詞、一個=符號和一個逗號分隔的單詞串列。該串列必須至少包含一個條目。所以abc=應該是無效的,但是abc=123是有效的。
我正在使用一個允許正則運算式(Java)將輸入欄位標記為有效或無效的框架。如何在正則運算式中表達此規則?
在https://stackoverflow.com/a/65244969/7821336的幫助下,我能夠驗證逗號分隔的串列。但是,一旦我在作業前加上我的東西,正則運算式就不再起作用了:
(\w )=((?:\w ) ),? // does not work!
uj5u.com熱心網友回復:
我使用了這段代碼,但它不使用任何正則運算式。代碼:
import java.util.*;
public class MyClass {
public static void main(String[] args) {
String something1 = "Something=Item1,Item2,Item3";
String something2 = "Something=";
String something3 = "Something";
String something4 = "=Item1,Item2,Item3";
System.out.println(isValid(something1));
System.out.println(isValid(something2));
System.out.println(isValid(something3));
System.out.println(isValid(something4));
}
public static boolean isValid(String string) {
boolean checkPart1Correct = string.contains("="); // check if it has = sign
if(!checkPart1Correct) return false;
//now we will split and see it it has items and the text before the = sign is not empty
String[] partsOfString = string.split("=");
if(partsOfString[0].trim().isEmpty()) return false;
try {
if(partsOfString[1] == null) return false;
}catch(Exception e) {
return false;
}
if(partsOfString[1] == null) return false;
String[] items = partsOfString[1].split(",");
if(items.length == 0) return false;
//now, we will make the items into a list, and then you can do whatever you want
List<String> itemsList = Arrays.asList(items);
//you can do whatever you want with that list
return true;
}
}
在此處測驗后,您可以看到它的實際效果。此外,這些是在此代碼中完成的檢查:
- 它將檢查 = 符號之前的文本是否不為空。
- 它將檢查它是否有 = 符號。
- 它將檢查專案是否為空
- 它還將為我們提供該串列中專案的串列。
uj5u.com熱心網友回復:
試試這個正則運算式:
\w =\w (,\w )*
在 Java 中是這樣使用的:
if (input.matches("\\w =\\w (,\\w )*") {
// input is OK
}
如果第一部分不應該有數字,請改用:
[a-zA-Z_] =\w (,\w )*
或者如果只是第一個字符不應該是數字(即它應該是一個有效的 Java 變數名),使用這個:
[a-zA-Z_]\w*=\w (,\w )*
uj5u.com熱心網友回復:
您沒有在組中重復逗號,這就是為什么在有多個逗號分隔值時它不起作用的原因。
如果您想獲得鍵和值的單獨匹配,您可以使用\G錨。
(?:^(\w )=|\G(?!^))(\w )(?:,|$)
解釋
(?:非捕獲組^(\w )=斷言字串的開頭并在第 1 組中捕獲 1 個單詞字符|或者\G(?!^)在上一場比賽結束時斷言位置,而不是在開始時
)關閉非捕獲組(\w )捕獲組 2,匹配 1 個單詞字符(?:,|$)匹配,或斷言字串的結尾
正則運算式演示| Java 演示
例如:
String regex = "(?:^(\\w )=|\\G(?!^))(\\w )(?:,|$)";
Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
String[] strings = {"Something=Item1,Item2,Item3", "someOtherThing=Some_Item", "Something="};
for (String s : strings) {
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
String gr1 = matcher.group(1);
String gr2 = matcher.group(2);
if (gr1 != null) {
System.out.println("Group 1: " gr1);
}
if (gr2 != null) {
System.out.println("Group 2: " gr2);
}
}
}
輸出
Group 1: Something
Group 2: Item1
Group 2: Item2
Group 2: Item3
Group 1: someOtherThing
Group 2: Some_Item
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/483110.html
下一篇:僅當只有固定字串時才洗掉固定字串
