myregexp.com很高興做一些測試。
官方Java Regex Tutorial是相當好的學習和包括大部分事情需要知道。
Pattern文檔還包含上面教程中缺少的特殊預定義字符類。
您沒有在您給出的例子中指定任何必須規則的東西。如果有規則來驗證輸入,正則表達式纔有意義。
如果它必須完全是"blocka#123#456"
那麼"blocka#123#456"
或"^blocka#123#456$"
將作爲正則表達式工作。 ^
和$
之間的東西意味着裏面的正則表達式必須從輸入的開始到結束。有時需要,通常是一個好主意,把它放在你的正則表達式中。
如果blocka
是動態與[a-z]+
替換它通過z
具有至少1長度相匹配的小寫字母a
任何序列。block[a-z]
將匹配blocka
,blockb
等。 和[a-z]{6}
將匹配正好6個字母的任何序列。 [a-zA-Z]
也包括大寫字母,並且\p{L}
匹配包括unicode內容的任何字母(例如Blüc本
)。
#
匹配#
。像任何沒有特殊正則表達式的字符(\^$ . | ? * + () [ ] { }
)字符匹配自己。 [^#]
匹配每個字符,但是#
。
關於數字:[0-9]+
或\d+
是幾個數字的通用模式,[0-9]{1,4}
將匹配任何東西,包括了1-4的數字像007
,5
,9999
。例如(?:0|[1-9][0-9]{0,3})
只會匹配0
和9999
之間的數字,並且不允許前導零。 (?:STUFF)
是一個非捕獲組,不影響您可以通過Matcher#group(1..?)
提取的組。用於邏輯分組|
。 (?:0|[1-9][0-9]{0,3})
的含義是:或者是單個0
或(1x 1
-9
-0,03-0 0
-9
)。
[0-9]
是如此普遍以至於它有一個預定義:\d
(數字)。這是\\d
裏面的正則表達式String
因爲你必須逃過\
。
所以你的一些選項
".*"
這絕對一切
"^[^#]+(?:#[^#]+)+$"
它匹配的任何東西#
像"hello #world!1# -12.f #本#foo#bar"
"^blocka(#\\d+)+$"
相匹配,然後在至少一組由分隔的數字blocka
分離匹配#
例如blocka#1#12#0007#949432149#3
"^blocka#(?:[0-9]|[1-9][0-9]|[1-3][0-9]{2})#[4-9][0-9]{2}$"
如果發現blocka#
後面數字0,這將只匹配 - 399,隨後#
最後數400-999
"^blocka#123#456$"
只匹配正是字符串。
所有這些都是與您給出的示例匹配的正則表達式。
但它可能是因爲
public void Store_QR(String qr){
if(qr.matches("^blocka#\\d+#\\d+$")) {
CurrentLocation = qr;
}
else // Break the operation
}
或
private static final Pattern QR_PATTERN = Pattern.compile("^blocka#(\\d+)#(\\d+)$");
public void Store_QR(String qr){
Matcher matcher = QR_PATTERN.matcher(qr);
if(matcher.matches()) {
int number1 = Integer.valueOf(matcher.group(1));
int number2 = Integer.valueOf(matcher.group(2));
CurrentLocation = qr;
}
else // Break the operation
}
塊名稱#start_X#start_Y任何塊的名字一樣簡單..開始以字符串「塊」,後兩個整數
我想一個很好的正則表達式,這將是"^block\\w+#\\d+#\\d+$"
,從"block"
,那麼a
任意組合 - z
,A
- Z
,0
- 9
和_
(即\w
)後面跟着#
,數字,#
,數字。
將匹配block_#0#0
,blockZ#9#9
,block_a_Unicorn666#0000#1234
,但不block#1#2
因爲根本沒有名稱,將不匹配blockName#123#abc
因爲字母而不是數字。也將不匹配Block_a#123#456
因爲大寫字母B.
。如果名稱部分(\\w+
)是過於寬鬆(___
,_123
將是一個合法的名稱),例如使用"^block_?[a-zA-Z]+#\\d+#\\d+$"
,什麼不允許數字和名字只能被一個可選的_
分開,並且之後必須有字母。將允許_a
,a
,_ABc
,但不允許_
,,_a9
。如果您想允許名稱中的數字[a-zA-Z0-9]
將是要使用的字符類。
什麼是你的QR碼的確切模式,你能舉出更多的例子嗎? –
請詳細解釋您想要匹配的具體內容。例如。 #是什麼,它們是否代表任何數字或文字字符#,是文字字符串「blocka」中的「blocka」部分還是隻是6個字符長度的文本示例。回答這些問題會使正則表達式自我解釋。我相信,如果你回答這些問題,你可以自己回答這個問題,通過學習正則表達式來增強自己的能力。 – hsanders
字符串模式是BlockName#start_X#end_X – Ruby