Ⅰ java中的正則表達式問題
(1)Java正則表達式不需要導入包什麼的,是JDK某個版本後自帶的功能。util包里的功能。
怎麼書寫這個問題,我不知道你再問什麼。因為我看你下面也會寫啊。
至於表達式,就是那些規則。基本掌握了,需要什麼條件,自己構造就行了。或者可以在網上找個正則表達式的生成器。我之前有,現在好久不用了,好像是丟掉了。
(2)轉成int,就用Integer的parseint方法
轉成char類型的,沒有這種方法,只能判斷是char型後,用string的charAt(0)取。
代碼如下:
public static void main(String[] args) {
String intPattern = "^[+-]?[1-9][0-9]*$|^0$";
String charPattern = "[a-zA-Z]";
String[] str = {"345","ddd","a","Z","0","12","csd","w","P"};
int[] intArray = new int[5];
char[] charArray = new char[5];
String[] other = new String[5];
int ii=0,ci=0,si=0;
for(int i=0;i<str.length;i++){
if(Pattern.matches(intPattern, str[i])){
intArray[ii] = Integer.parseInt(str[i]);
ii++;
}else if(Pattern.matches(charPattern, str[i])){
charArray[ci] = str[i].charAt(0);
ci++;
}else{
other[si] = str[i];
si++;
}
}
System.out.print("int型的數據有:");
for(int j=0;j<ii;j++){
System.out.print(intArray[j]+",");
}
System.out.print("\nchar型的數據有:");
for(int j=0;j<ci;j++){
System.out.print(charArray[j]+",");
}
System.out.print("\n其它的為:");
for(int j=0;j<si;j++){
System.out.print(other[j]+",");
}
}
(3)String x=in.nextLine();
把你裡面的next換成nextLine。
不管游標在哪裡,都會在下一行顯示的。不過有時候也回出現些問題。
目前沒有什麼好的解決方法。因為java代碼一般不用控制台的。所以,你以後做別的項目只有調試的時候用,其它時候不用的。
如果非要解決,你可以試著找找有沒有這個相關的插件。
Ⅱ java pattern 正則表達式中的 '+' 和 '*' 分別是什麼意思
+ 表示 1個到多個
* 表示 0到多個
? 表示0或者1個
*?和+?叫做非貪婪匹配
+和*表示盡可能多的匹配
+?和*? 表示盡可能少的匹配
任意字元的范圍,如果要匹配帶有連續文本,貪婪匹配會使得中間的內容盡可能長,也就是第一個標簽的開頭和最後一個標簽結尾整個作為一個結果返回。
如果是非貪婪的,就會把每一個標簽作為單獨一個結果返回。
Ⅲ (<=)[0-9]+(=;) Java 正則表達式
(?<=exp) 及(?=exp)叫零寬斷言,作用就是匹配但是不捕獲。
你的例子就是匹配 以開頭 以;結尾的連續數字。及;不會被捕獲。
Ⅳ 大家好,幫我理解一下下面的幾個java里的正則表達式的意思在java的Pattern類里出來的
aaaax?bbbbb
? 限定 'x' 出現1次或0次 可匹配 "aaaaxbbbbb" 也可匹配 "aaaabbbbb"
--------------------------------
aaaax*bbbbb
* 限定 'x' 出現任意次 可匹配 "aaaabbbbb" 也可匹配 "aaaaxxxxxbbbbb" 也可匹配 "aaaaxxxxxxxxxxxxxxxbbbbb" 多少個 x 都行
--------------------------------
aaaax+bbbbb
+ 限定 'x' 出現1次或1次以上 可匹配 "aaaaxbbbbb" 也可匹配"aaaaxxxxxbbbbb" 也可匹配"aaaaxxxxxxxxxxxxbbbbb"多少個 x 都行,就不能沒有 'x'
--------------------------------
aaaax{3}bbbbb
{3} 限定 'x' 出現3次或3次以上 可匹配 "aaaaxxxbbbbb"
--------------------------------
aaaax{3,}bbbbb
{3,} 限定 'x' 出現3次 可匹配 "aaaaxxxbbbbb" 也可匹配"aaaaxxxxxbbbbb" 也可匹配"aaaaxxxxxxxxxxxxbbbbb"多少個 x 都行,就不能小於3次
--------------------------------
aaaax{3,5}bbbbb
{3,5} 限定 'x' 出現3次至5次 可匹配 "aaaaxxxbbbbb" 也可匹配"aaaaxxxxxbbbbb" 也可匹配"aaaaxxxxbbbbb" 不能小於3次,不能大於5次
--------------------------------
--------------------------------
--------------------------------
--------------------------------
--------------------------------
相信樓主能明白?, +, *, {n}, {n,}, {n,m} 的意思了
如果在限定符後邊再加上一個 ?
變成 ??, +?, *?, {n}?, {n,}?, {n,m}?
那麼它就是懶惰模式
不加的就是貪婪模式
比如有 原文: "----------AzzzzzzzzzzzzAxxxxxxxxxxA--------"
那麼 表達式 "A\w*A" 會匹配 "AzzzzzzzzzzzzAxxxxxxxxxxA" 這部分
那麼 表達式 "A\w*?A" 會匹配 "AzzzzzzzzzzzzA" 這部分
貪夢模式,盡可能多的匹配
懶惰模式,盡可能少的匹配
Ⅳ java中「」是什麼意思
ArrayList<?> list=new ArrayList<?>();
帶有問好的表示【泛型】,你去學習一下泛型就知道的了,狠簡單的
例如,一個數據結構中,它的結構是一樣,但是,如果類型為int\String\Object\char等,是不是都要創建不同的類出來,如果這樣做,就非常麻煩,所以出現了「泛型」這東西(記住,泛型不是一種類型),例如,一個棧,可以用Stack<Integer>表示一個Integer的棧,使用Stack<String>表示一個String的棧,在定義Stack的時候,就使用了Stack<?>了
Ⅵ Java正則表達式 \\d+.\\d{1,2}
\\d表示數字
\\d+表示1個到多個數字
?表示0個或1個
.?就表示有一個點或者0個點
\\d{1,2}表示有一個或者兩個數字(就是小數點後面)
不限位數
\\d+.?\\d+
Ⅶ 正則表達式是什麼
正則表達式(英文:Regular Expression),在計算機科學中,是指一個用來描述或者匹配一系列符合某個句法規則的字元串的單個字元串。在很多文本編輯器或其他工具里,正則表達式通常被用來檢索和/或替換那些符合某個模式的文本內容。許多程序設計語言都支持利用正則表達式進行字元串操作。例如,在Perl中就內建了一個功能強大的正則表達式引擎。正則表達式這個概念最初是由Unix中的工具軟體(例如sed和grep)普及開的。「正則表達式」通常縮寫成「regex」,單數有regexp、regex,復數有regexps、regexes、regexen。
基本概念 一個正則表達式通常被稱為一個模式 (pattern),為用來描述或者匹配一系列符合某個句法規則的字元串。例如:Handel、H�0�1ndel 和 Haendel 這三個字元串,都可以由 "H(a|�0�1|ae)ndel" 這個模式來描述。大部分正則表達式的形式都有如下的結構:替換 | 豎直分隔符代表替換。例如"gray|grey"可以匹配grey或gray。</dd>數量限定 某個字元後的數量限定符用來限定前面這個字元允許出現的個數。最常見的數量限定符包括「+」,「?」和「*」(不加數量限定則代表出現一次且僅出現一次):+ 加號代表前面的字元必須至少出現一次。(1次,或多次)。例如,"goo+gle"可以匹配google,gooogle,goooogle等;</dd>? 問號代表前面的字元最多隻可以出現一次。(0次,或1次)。例如,"colou?r"可以匹配colour或者color;</dd>* 星號代表前面的字元可以不出現,也可以出現一次或者多次。(0次,或1次,或多次)。例如,"0*42"可以匹配42,042,0042,00042等。</dd>匹配 圓括弧可以用來定義操作符的范圍和優先度。例如,"gr(a|e)y"等價於"gray|grey","(grand)?father"匹配father和grandfather。上述這些構造子都可以自由組合,因此,"H(ae?|�0�1)ndel"和"H(a|ae|�0�1)ndel"是相同的。精確的語法可能因不同的工具或程序而異。歷史 最初的正則表達式出現於理論計算機科學的自動控制理論和形式語言理論中。在這些領域中有對計算(自動控制)的模型和對形式語言描述與分類的研究。1940年代,Warren McCulloch與Walter Pitts將神經系統中的神經元描述成小而簡單的自動控制元。在1950年代,數學家斯蒂芬·科爾·克萊尼利用稱之為正則集合的數學符號來描述此模型。肯·湯普遜將此符號系統引入編輯器QED,然後是Unix上的編輯器ed,並最終引入grep。自此,正則表達式被廣泛地使用於各種Unix或者類似Unix的工具,例如Perl。Perl正則表達式源自於Henry Spencer寫的regex,它已經演化成了pcre(Perl兼容正則表達式Perl Compatible Regular Expressions),一個由Philip Hazel開發的,為很多現代工具所使用的庫。各計算機語言之間的正則表達式的整合目前開展的很差。未來的Perl6的子項目Apocalypse的設計中已考慮到了這點。形式語言理論 正則表達式可以用形式語言理論的方式來表達。正則表達式由常量和運算元組成,它們分別指示字元串的集合和在這些集合上的運算。給定有限字母表 Σ 定義了下列常量:(「空集」) �6�1 指示集合 �6�1 (「空串」) ε 指示集合 {ε} (「文字字元」) 在 Σ 中的 a 指示集合 {a} 定義了下列運算:(「串接」) RS 指示集合 { αβ | α ∈ R ∧ β ∈ S }。例如 {"ab"|"c"}{"d"|"ef"} = {"abd", "abef", "cd", "cef"}。 (「選擇」) R|S 指示 R 和 S 的並集。 (「Kleene星號」) R* 指示包含 ε 並且閉合在字元串串接下的 R 的最小超集。這是可以通過 R 中的零或多個字元串的串接得到所有字元串的集合。例如,{"ab", "c"}* = {ε, "ab", "c", "abab", "abc", "cab", "cc", "ababab", ... }。 上述常量和運算元形成了克萊尼代數。很多課本使用對選擇使用符號 ∪, + 或 ∨ 替代豎杠。為了避免括弧,假定 Kleene 星號有最高優先順序,接著是串接,接著是並集。如果沒有歧義則可以省略括弧。例如,(ab)c 可以寫為 abc 而 a|(b(c*)) 可以寫為 a|bc*。例子:a|b* 指示 {ε, a, b, bb, bbb, ...}。 (a|b)* 指示由包括空串、任意數目個 a 和 b 字元組成的所有字元串的集合。 ab*(c|ε) 指示開始於一個 a 接著零或多個 b 和最終可選的一個 c 的字元串的集合。 正則表達式的形式定義故意非常精簡,避免定義多餘的量詞 ? 和 +,它們可以被表達為: a+ = aa* 和 a? = (a|ε)。有時增加補運算元 ~ ;~R 指示在 Σ* 上的不在 R 中的所有字元串的集合。補運算元是多餘的,因為它使用其他運算元來表達(盡管計算這種表示的過程是復雜的,而結果可能指數性的增大)。這種意義上的正則表達式可以表達正則語言,精確的是可被有限狀態自動機接受的語言類。但是在簡潔性上有重要區別。某類正則語言只能用大小指數增長的自動機來描述,而要求的正則表達式的長度只線性的增長。正則表達式對應於喬姆斯基層級的類型-3文法。在另一方面,在正則表達式和不導致這種大小上的爆炸的非確定有限狀態自動機(NFA)之間有簡單的映射;為此 NFA 經常被用作正則表達式的替代表示。我們還要在這種形式化中研究表達力。如下面例子所展示的,不同的正則表達式可以表達同樣的語言: 這種形式化中存在著冗餘。有可能對兩個給定正則表達式寫一個演算法來判定它們所描述的語言是否本質上相等,簡約每個表達式到極小確定有限自動機,確定它們是否同構(等價)。這種冗餘可以消減到什麼程度? 我們可以找到仍有完全表達力的正則表達式的有趣的子集嗎? Kleene 星號和並集明顯是需要的,但是我們或許可以限制它們的使用。這提出了一個令人驚奇的困難問題。因為正則表達式如此簡單,沒有辦法在語法上把它重寫成某種規 范形式。過去公理化的缺乏導致了星號高度問題。最近 Dexter Kozen 用克萊尼代數公理化了正則表達式。很多現實世界的「正則表達式」引擎實現了不能用正則表達式代數表達的特徵。表達式全集 正則表達式有多種不同的風格。下表是在PCRE中元字元及其在正則表達式上下文中的行為的一個完整列表:字元描述\將下一個字元標記為一個特殊字元、或一個原義字元、或一個向後引用、或一個八進制轉義符。例如,「n」匹配字元「n」。「\n」匹配一個換行符。序列「\\」匹配「\」而「\(」則匹配「(」。^匹配輸入字元串的開始位置。如果設置了RegExp對象的Multiline屬性,^也匹配「\n」或「\r」之後的位置。$匹配輸入字元串的結束位置。如果設置了RegExp對象的Multiline屬性,$也匹配「\n」或「\r」之前的位置。*匹配前面的子表達式零次或多次。例如,zo*能匹配「z」以及「zoo」。*等價於{0,}。+匹配前面的子表達式一次或多次。例如,「zo+」能匹配「zo」以及「zoo」,但不能匹配「z」。+等價於{1,}。?匹配前面的子表達式零次或一次。例如,「do(es)?」可以匹配「do」或「does」中的「do」。?等價於{0,1}。{n}n是一個非負整數。匹配確定的n次。例如,「o{2}」不能匹配「Bob」中的「o」,但是能匹配「food」中的兩個o。{n,}n是一個非負整數。至少匹配n次。例如,「o{2,}」不能匹配「Bob」中的「o」,但能匹配「foooood」中的所有o。「o{1,}」等價於「o+」。「o{0,}」則等價於「o*」。{n,m}m和n均為非負整數,其中n<=m。最少匹配n次且最多匹配m次。例如,「o{1,3}」將匹配「fooooood」中的前三個o。「o{0,1}」等價於「o?」。請注意在逗號和兩個數之間不能有空格。?當該字元緊跟在任何一個其他限制符(*,+,?,{n},{n,},{n,m})後面時,匹配模式是非貪婪的。非貪婪模式盡可能少的匹配所搜索的字元串,而默認的貪婪模式則盡可能多的匹配所搜索的字元串。例如,對於字元串「oooo」,「o+?」將匹配單個「o」,而「o+」將匹配所有「o」。.匹配除「\n」之外的任何單個字元。要匹配包括「\n」在內的任何字元,請使用像「[.\n]」的模式。(pattern)匹配pattern並獲取這一匹配。所獲取的匹配可以從產生的Matches集合得到,在VBScript中使用SubMatches集合,在JScript中則使用$0…$9屬性。要匹配圓括弧字元,請使用「\(」或「\)」。(?:pattern)匹配pattern但不獲取匹配結果,也就是說這是一個非獲取匹配,不進行存儲供以後使用。這在使用「或」字元(|)來組合一個模式的各個部分是很有用。例如,「instr(?:y|ies)就是一個比」instry|instries'更簡略的表達式。(?=pattern)正向預查,在任何匹配pattern的字元串開始處匹配查找字元串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以後使用。例如, 「Windows(?=95|98|NT|2000)」能匹配「Windows2000」中的「Windows」,但不能匹配「Windows3.1」中 的「Windows」。預查不消耗字元,也就是說,在一個匹配發生後,在最後一次匹配之後立即開始下一次匹配的搜索,而不是從包含預查的字元之後開始。(?!pattern)負向預查,在任何不匹配pattern的字元串開始處匹配查找字元串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以後使用。例如 「Windows(?!95|98|NT|2000)」能匹配「Windows3.1」中的「Windows」,但不能匹配「Windows2000」中 的「Windows」。預查不消耗字元,也就是說,在一個匹配發生後,在最後一次匹配之後立即開始下一次匹配的搜索,而不是從包含預查的字元之後開始x|y匹配x或y。例如,「z|food」能匹配「z」或「food」。「(z|f)ood」則匹配「zood」或「food」。[xyz]字元集合。匹配所包含的任意一個字元。例如,「[abc]」可以匹配「plain」中的「a」。[^xyz]負值字元集合。匹配未包含的任意字元。例如,「[^abc]」可以匹配「plain」中的「p」。[a-z]字元范圍。匹配指定范圍內的任意字元。例如,「[a-z]」可以匹配「a」到「z」范圍內的任意小寫字母字元。[^a-z]負值字元范圍。匹配任何不在指定范圍內的任意字元。例如,「[^a-z]」可以匹配任何不在「a」到「z」范圍內的任意字元。\b匹配一個單詞邊界,也就是指單詞和空格間的位置。例如,「er\b」可以匹配「never」中的「er」,但不能匹配「verb」中的「er」。\B匹配非單詞邊界。「er\B」能匹配「verb」中的「er」,但不能匹配「never」中的「er」。\cx匹配由x指明的控制字元。例如,\cM匹配一個Control-M或回車符。x的值必須為A-Z或a-z之一。否則,將c視為一個原義的「c」字元。\d匹配一個數字字元。等價於[0-9]。\D匹配一個非數字字元。等價於[^0-9]。\f匹配一個換頁符。等價於\x0c和\cL。\n匹配一個換行符。等價於\x0a和\cJ。\r匹配一個回車符。等價於\x0d和\cM。\s匹配任何空白字元,包括空格、製表符、換頁符等等。等價於[\f\n\r\t\v]。\S匹配任何非空白字元。等價於[^\f\n\r\t\v]。\t匹配一個製表符。等價於\x09和\cI。\v匹配一個垂直製表符。等價於\x0b和\cK。\w匹配包括下劃線的任何單詞字元。等價於「[A-Za-z0-9_]」。\W匹配任何非單詞字元。等價於「[^A-Za-z0-9_]」。\xn匹配n,其中n為十六進制轉義值。十六進制轉義值必須為確定的兩個數字長。例如,「\x41」匹配「A」。「\x041」則等價於「\x04」&「1」。正則表達式中可以使用ASCII編碼。.\num匹配num,其中num是一個正整數。對所獲取的匹配的引用。例如,「(.)\1」匹配兩個連續的相同字元。\n標識一個八進制轉義值或一個向後引用。如果\n之前至少n個獲取的子表達式,則n為向後引用。否則,如果n為八進制數字(0-7),則n為一個八進制轉義值。\nm標識一個八進制轉義值或一個向後引用。如果\nm之前至少有nm個獲得子表達式,則nm為向後引用。如果\nm之前至少有n個獲取,則n為一個後跟文字m的向後引用。如果前面的條件都不滿足,若n和m均為八進制數字(0-7),則\nm將匹配八進制轉義值nm。\nml如果n為八進制數字(0-3),且m和l均為八進制數字(0-7),則匹配八進制轉義值nml。\un匹配n,其中n是一個用四個十六進制數字表示的Unicode字元。例如,\u00A9匹配版權符號(�0�8)。範例 以下以php的語法所寫的範例驗證字串是否只含數字與英文, 字串長度並在4~16個字元之間 <?php
$str = 'a1234';
if (preg_match("^[a-zA-Z0-9]{4,16}$", $str)) {
echo "驗證成功";
} else {
echo "驗證失敗";
}
?> 簡易的台灣身份證字型大小驗證 <?php
$str = 'a1234';
if (preg_match("^[A-Z]{1}[1-2]{1}[0-9]{8}$", $str)) {
echo "驗證成功";
} else {
echo "驗證失敗";
}
?>
Ⅷ 在JAVA中要屏蔽中文逗號,正則表達式怎麼寫
英文標點符號比較多,如,(逗號)、。(點號)、?(問號)、:(冒號)、;(分號)、『』(單引號)、!(感嘆號)、「」(雙引號)、—(連接號)、——(破折號)、……(省略號)、()(小括弧)、【】(中括弧)、{}(大括弧)、(頓號)、《》書名號等。以下正則表達式能夠驗證英文標點符號。
[,。?:;『』!「」—……、]|(-{2})|(())|(【】)|({})|(《》) (64)
正則表達式(64)解釋:
[,。?:;『』!「」—……、]匹配,、。、?、:、;、『、』、!、「、」、—、……符號。
-{2}匹配破折號。
()匹配省略號小括弧。
【】匹配中括弧。
{}匹配大括弧。
《》匹配書名號。