[英]What is the pattern for empty string?
我需要驗證輸入:有效的變量是數字或空字符串。 相應的正則表達式是什么?
String pattern = "\d+|<what shoudl be here?>";
UPD:請不要建議“\\ d *”,我只是好奇如何在regexp中告訴“空字符串”。
在這種特殊情況下, ^\\d*$
可以工作,但一般來說,為了匹配pattern
或空字符串,您可以使用:
^$|pattern
^
和$
分別是字符串錨點的開頭和結尾。 |
用於表示替換,例如, this|that
。 在所謂的多模式( Pattern.MULTILINE/(?m)
在Java中),該^
和$
匹配行的開頭和結尾來代替。 字符串開頭和結尾的錨點現在分別是\\A
和\\Z
如果您處於多線模式,則空字符串將與\\A\\Z
匹配。 ^$
將匹配字符串中的空行。
以下是一些例子來說明以上幾點:
String numbers = "012345";
System.out.println(numbers.replaceAll(".", "<$0>"));
// <0><1><2><3><4><5>
System.out.println(numbers.replaceAll("^.", "<$0>"));
// <0>12345
System.out.println(numbers.replaceAll(".$", "<$0>"));
// 01234<5>
numbers = "012\n345\n678";
System.out.println(numbers.replaceAll("^.", "<$0>"));
// <0>12
// 345
// 678
System.out.println(numbers.replaceAll("(?m)^.", "<$0>"));
// <0>12
// <3>45
// <6>78
System.out.println(numbers.replaceAll("(?m).\\Z", "<$0>"));
// 012
// 345
// 67<8>
matches
注釋 在Java中, matches
嘗試將模式與整個字符串進行匹配。
這適用於String.matches
, Pattern.matches
和Matcher.matches
。
這意味着有時候,對於其他版本和/或其他Java正則表達式方法而言,對於Java matches
,可以省略錨點。
/^\d*$/
匹配0或更多數字之前或之后沒有任何內容。
說明:
'^'表示行首。 '$'表示行尾。 '*'匹配0或更多次出現。 因此,模式匹配整個行與0或更多位數。
要顯式匹配空字符串,請使用\\A\\Z
您還可以經常看到^$
工作正常,除非將該選項設置為允許^
和$
anchors不僅匹配字符串的開頭或結尾,而且還匹配每行的開頭/結尾。 如果您的輸入永遠不能包含換行符,那么^$
當然是完全正常的。
一些正則表達式風格不支持\\A
和\\Z
錨點(尤其是JavaScript)。
如果你想在“沒有或只有空格”中允許“空”,那么去\\A\\s*\\Z
或^\\s*$
。
就像一個有趣的解決方案,你可以這樣做:
\d+|\d{0}
一個數字,零次。 是的,它確實有效。
查看常規語言集合的方法之一是關閉以下內容:
Concreate常規語言是此閉包的具體元素。
我沒有在POSIX標准中找到空符號來表達步驟(1)中的常規語言思想。
但是存在像posix定義那樣的問號額外的東西如下:
(regexp | <EMPTY_STRING>)
所以你可以用以下方式為bash,perl和python做:
echo 9023 | grep -E "(1|90)?23"
perl -e "print 'PASS' if (qq(23) =~ /(1|90)?23/)"
python -c "import re; print bool(re.match('^(1|90)?23$', '23'))"
只有"\\d+|"
應該沒有任何問題
要使任何匹配整個字符串的模式可選,即允許模式匹配空字符串,請使用可選組 :
^(pattern)?$
^^ ^^^
請參閱正則表達式演示
如果正則表達式引擎允許(如在Java中),則首選非捕獲組,因為其主要目的是僅對子模式進行分組,而不是保留捕獲的子值:
^(?:pattern)?$
^
將匹配字符串的開頭(或者\\A
可以在很多種情況下用於此), $
將匹配字符串的結尾(或者\\z
可用於匹配許多種類的最終結尾,而Java也是如此) ),和(....)?
將匹配括號內的子模式的1或0(由於?
量詞) 序列 。
Java使用說明:在matches()
,可以省略初始^
和尾隨$
,您可以使用
String pattern = "(?:\d+)?";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.