『壹』 關於java的正則表達
問題說得不清楚 具體用什麼技術實現啊,對比的要求是什麼 先貼個教程 你可以先看下
正則表達式
"^\\d+$" //非負整數(正整數 + 0)
"^[0-9]*[1-9][0-9]*$" //正整數
"^((-\\d+)|(0+))$" //非正整數(負整數 + 0)
"^-[0-9]*[1-9][0-9]*$" //負整數
"^-?\\d+$" //整數
"^\\d+(\\.\\d+)?$" //非負浮點數(正浮點數 + 0)
"^(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*))$" //正浮點數
"^((-\\d+(\\.\\d+)?)|(0+(\\.0+)?))$" //非正浮點數(負浮點數 + 0)
"^(-(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*)))$" //負浮點數
"^(-?\\d+)(\\.\\d+)?$" //浮點數
"^[A-Za-z]+$" //由26個英文字母組成的字元串
"^[A-Z]+$" //由26個英文字母的大寫組成的字元串
"^[a-z]+$" //由26個英文字母的小寫組成的字元串
"^[A-Za-z0-9]+$" //由數字和26個英文字母組成的字元串
"^\\w+$" //由數字、26個英文字母或者下劃線組成的字元串
"^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$" //email地址
"^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$" //url
"^[A-Za-z0-9_]*$"
正則表達式使用詳解
簡介
簡單的說,正則表達式是一種可以用於模式匹配和替換的強有力的工具。其作用如下:
測試字元串的某個模式。例如,可以對一個輸入字元串進行測試,看在該字元串是否存在一個電話號碼模式或一個信用卡號碼模式。這稱為數據有效性驗證。
替換文本。可以在文檔中使用一個正則表達式來標識特定文字,然後可以全部將其刪除,或者替換為別的文字。
根據模式匹配從字元串中提取一個子字元串。可以用來在文本或輸入欄位中查找特定文字。
基本語法
在對正則表達式的功能和作用有了初步的了解之後,我們就來具體看一下正則表達式的語法格式。
正則表達式的形式一般如下:
/love/ 其中位於「/」定界符之間的部分就是將要在目標對象中進行匹配的模式。用戶只要把希望查找匹配對象的模式內容放入「/」定界符之間即可。為了能夠使用戶更加靈活的定製模式內容,正則表達式提供了專門的「元字元」。所謂元字元就是指那些在正則表達式中具有特殊意義的專用字元,可以用來規定其前導字元(即位於元字元前面的字元)在目標對象中的出現模式。
較為常用的元字元包括: 「+」, 「*」,以及 「?」。
「+」元字元規定其前導字元必須在目標對象中連續出現一次或多次。
「*」元字元規定其前導字元必須在目標對象中出現零次或連續多次。
「?」元字元規定其前導對象必須在目標對象中連續出現零次或一次。
下面,就讓我們來看一下正則表達式元字元的具體應用。
/fo+/ 因為上述正則表達式中包含「+」元字元,表示可以與目標對象中的 「fool」, 「fo」, 或者 「football」等在字母f後面連續出現一個或多個字母o的字元串相匹配。
/eg*/ 因為上述正則表達式中包含「*」元字元,表示可以與目標對象中的 「easy」, 「ego」, 或者 「egg」等在字母e後面連續出現零個或多個字母g的字元串相匹配。
/Wil?/ 因為上述正則表達式中包含「?」元字元,表示可以與目標對象中的 「Win」, 或者「Wilson」,等在字母i後面連續出現零個或一個字母l的字元串相匹配。
有時候不知道要匹配多少字元。為了能適應這種不確定性,正則表達式支持限定符的概念。這些限定符可以指定正則表達式的一個給定組件必須要出現多少次才能滿足匹配。
{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?'。請注意在逗號和兩個數之間不能有空格。
除了元字元之外,用戶還可以精確指定模式在匹配對象中出現的頻率。例如,/jim {2,6}/ 上述正則表達式規定字元m可以在匹配對象中連續出現2-6次,因此,上述正則表達式可以同jimmy或jimmmmmy等字元串相匹配。
在對如何使用正則表達式有了初步了解之後,我們來看一下其它幾個重要的元字元的使用方式。
\s:用於匹配單個空格符,包括tab鍵和換行符;
\S:用於匹配除單個空格符之外的所有字元;
\d:用於匹配從0到9的數字;
\w:用於匹配字母,數字或下劃線字元;
\W:用於匹配所有與\w不匹配的字元;
. :用於匹配除換行符之外的所有字元。
(說明:我們可以把\s和\S以及\w和\W看作互為逆運算)
下面,我們就通過實例看一下如何在正則表達式中使用上述元字元。
/\s+/ 上述正則表達式可以用於匹配目標對象中的一個或多個空格字元。
/\d000/ 如果我們手中有一份復雜的財務報表,那麼我們可以通過上述正則表達式輕而易舉的查找到所有總額達千元的款項。
除了我們以上所介紹的元字元之外,正則表達式中還具有另外一種較為獨特的專用字元,即定位符。定位符用於規定匹配模式在目標對象中的出現位置。 較為常用的定位符包括: 「^」, 「$」, 「\b」 以及 「\B」。
「^」定位符規定匹配模式必須出現在目標字元串的開頭
「$」定位符規定匹配模式必須出現在目標對象的結尾
「\b」定位符規定匹配模式必須出現在目標字元串的開頭或結尾的兩個邊界之一
「\B」定位符則規定匹配對象必須位於目標字元串的開頭和結尾兩個邊界之內,即匹配對象既不能作為目標字元串的開頭,也不能作為目標字元串的結尾。同樣,我們也可以把「^」和「$」以及「\b」和「\B」看作是互為逆運算的兩組定位符。舉例來說: /^hell/ 因為上述正則表達式中包含「^」定位符,所以可以與目標對象中以 「hell」, 「hello」或「hellhound」開頭的字元串相匹配。 /ar$/ 因為上述正則表達式中包含「$」定位符,所以可以與目標對象中以 「car」, 「bar」或 「ar」 結尾的字元串相匹配。 /\bbom/ 因為上述正則表達式模式以「\b」定位符開頭,所以可以與目標對象中以 「bomb」, 或 「bom」開頭的字元串相匹配。/man\b/ 因為上述正則表達式模式以「\b」定位符結尾,所以可以與目標對象中以 「human」, 「woman」或 「man」結尾的字元串相匹配。
為了能夠方便用戶更加靈活的設定匹配模式,正則表達式允許使用者在匹配模式中指定某一個范圍而不局限於具體的字元。例如:
/[A-Z]/ 上述正則表達式將會與從A到Z范圍內任何一個大寫字母相匹配。
/[a-z]/ 上述正則表達式將會與從a到z范圍內任何一個小寫字母相匹配。
/[0-9]/ 上述正則表達式將會與從0到9范圍內任何一個數字相匹配。
/([a-z][A-Z][0-9])+/ 上述正則表達式將會與任何由字母和數字組成的字元串,如 「aB0」 等相匹配。這里需要提醒用戶注意的一點就是可以在正則表達式中使用 「()」 把字元串組合在一起。「()」符號包含的內容必須同時出現在目標對象中。因此,上述正則表達式將無法與諸如 「abc」等的字元串匹配,因為「abc」中的最後一個字元為字母而非數字。
如果我們希望在正則表達式中實現類似編程邏輯中的「或」運算,在多個不同的模式中任選一個進行匹配的話,可以使用管道符 「|」。例如:/to|too|2/ 上述正則表達式將會與目標對象中的 「to」, 「too」, 或 「2」 相匹配。
正則表達式中還有一個較為常用的運算符,即否定符 「[^]」。與我們前文所介紹的定位符 「^」 不同,否定符 「[^]」規定目標對象中不能存在模式中所規定的字元串。例如:/[^A-C]/ 上述字元串將會與目標對象中除A,B,和C之外的任何字元相匹配。一般來說,當「^」出現在 「[]」內時就被視做否定運算符;而當「^」位於「[]」之外,或沒有「[]」時,則應當被視做定位符。
最後,當用戶需要在正則表達式的模式中加入元字元,並查找其匹配對象時,可以使用轉義符「\」。例如:/Th\*/ 上述正則表達式將會與目標對象中的「Th*」而非「The」等相匹配。
在構造正則表達式之後,就可以象數學表達式一樣來求值,也就是說,可以從左至右並按照一個優先順序順序來求值。優先順序如下:
1.\ 轉義符
2.(), (?=), [] 圓括弧和方括弧
3.*, +, ?, {n}, {n,}, {n,m} 限定符
4.^, $, \anymetacharacter 位置和順序
5.|「或」操作
『貳』 JavaScript正則表達式cookie.replace(/^\s+|\s+$/g, '');什麼意思
整體為如果cookie以一個或多個空格開始,替換全部空格為空,或者,如果cookie以一個或多個空格結束,替換全部空格為空。
符號含義:
s: space, 空格
+: 一個或多個
^: 開始,^s,以空格開始
$: 結束,s$,以空格結束
|:或者
/g:global, 全局
replace() 替換
(2)java正則表達式一個或多個空格擴展閱讀:
基本特點
JavaScript是一種屬於網路的腳本語言,已經被廣泛用於Web應用開發,常用來為網頁添加各式各樣的動態功能,為用戶提供更流暢美觀的瀏覽效果。通常JavaScript腳本是通過嵌入在HTML中來實現自身的功能的。
是一種解釋性腳本語言(代碼不進行預編譯)。
主要用來向HTML(標准通用標記語言下的一個應用)頁面添加交互行為。、
可以直接嵌入HTML頁面,但寫成單獨的js文件有利於結構和行為的分離。
跨平台特性,在絕大多數瀏覽器的支持下,可以在多種平台下運行(如Windows、Linux、Mac、Android、iOS等)。
Javascript腳本語言同其他語言一樣,有它自身的基本數據類型,表達式和算術運算符及程序的基本程序框架。Javascript提供了四種基本的數據類型和兩種特殊數據類型用來處理數據和文字。而變數提供存放信息的地方,表達式則可以完成較復雜的信息處理。
JavaScript腳本語言具有以下特點:
(1)腳本語言。JavaScript是一種解釋型的腳本語言,C、C++等語言先編譯後執行,而JavaScript是在程序的運行過程中逐行進行解釋。
(2)基於對象。JavaScript是一種基於對象的腳本語言,它不僅可以創建對象,也能使用現有的對象。
(3)簡單。JavaScript語言中採用的是弱類型的變數類型,對使用的數據類型未做出嚴格的要求,是基於Java基本語句和控制的腳本語言,其設計簡單緊湊。
(4)動態性。JavaScript是一種採用事件驅動的腳本語言,它不需要經過Web伺服器就可以對用戶的輸入做出響應。在訪問一個網頁時,滑鼠在網頁中進行滑鼠點擊或上下移、窗口移動等操作JavaScript都可直接對這些事件給出相應的響應。
(5)跨平台性。JavaScript腳本語言不依賴於操作系統,僅需要瀏覽器的支持。因此一個JavaScript腳本在編寫後可以帶到任意機器上使用。
『叄』 怎麼用java寫一個正則表達式去匹配包含一個或多個「*」的字元串
Pattern pattern = Pattern.compile("^[^\\*]*\\*+.*$");
Matcher matcher = pattern.matcher(你要匹來配自的字元串);
if(matcher.matches())
{
//TODO:匹配
}
else
{
//TODO:不匹配
}
上面的代碼應該可以滿足你的要求,不過你要判斷是否包含一個*。為什麼不直接用contains("*") 或者 indexOf("*") > 0 呢?呵呵,希望對你有所幫助。
『肆』 濡備綍浣跨敤姝e垯琛ㄨ揪寮
鍦⊿un鐨凧ava JDK 1.40鐗堟湰涓錛孞ava鑷甯︿簡鏀鎸佹e垯琛ㄨ揪寮忕殑鍖咃紝鏈鏂囧氨鎶涚爾寮曠帀鍦頒粙緇嶄簡濡備綍浣跨敤java.util.regex鍖呫
鍙綺楃暐浼拌′竴涓嬶紝闄や簡鍋跺皵鐢↙inux鐨勫栵紝鍏朵粬Linu x鐢ㄦ埛閮戒細閬囧埌姝e垯琛ㄨ揪寮忋傛e垯琛ㄨ揪寮忔槸涓鏋佺寮哄ぇ宸ュ叿錛岃屼笖鍦ㄥ瓧絎︿覆妯″紡-鍖歸厤鍜屽瓧絎︿覆妯″紡-鏇挎崲鏂歸潰瀵屾湁寮規с傚湪Unix涓栫晫閲岋紝姝e垯琛ㄨ揪寮忓嚑涔庢病鏈変粈涔堥檺鍒訛紝鍙鑲瀹氱殑鏄錛屽畠搴旂敤闈炲父涔嬪箍娉涖
姝e垯琛ㄨ揪寮忕殑寮曟搸宸茶璁稿氭櫘閫氱殑Unix宸ュ叿鎵瀹炵幇錛屽寘鎷琯rep錛宎wk錛寁i鍜孍macs絳夈傛ゅ栵紝璁稿氫嬌鐢ㄦ瘮杈冨箍娉涚殑鑴氭湰璇璦涔熸敮鎸佹e垯琛ㄨ揪寮忥紝姣斿侾ython錛孴cl錛孞avaScript錛屼互鍙婃渶钁楀悕鐨凱erl銆
鎴戝緢鏃╀互鍓嶅氨鏄涓狿erl鏂歸潰鐨勯粦瀹錛屽傛灉浣犲拰鎴戜竴鏍瘋瘽錛屼綘涔熶細闈炲父渚濊禆浣犳墜杈圭殑榪欎簺寮哄ぇ鐨則ext-munging宸ュ叿銆傝繎鍑犲勾鏉ワ紝鍍忓叾浠栫▼搴忓紑鍙戣呬竴鏍鳳紝鎴戜篃瓚婃潵瓚婂叧娉↗ava鐨勫紑鍙戙
Java浣滀負涓縐嶅紑鍙戣璦錛屾湁璁稿氬煎緱鎺ㄨ崘鐨勫湴鏂癸紝浣嗘槸瀹冧竴鐩翠互鏉ユ病鏈夎嚜甯﹀規e垯琛ㄨ揪寮忕殑鏀鎸併傜洿鍒版渶榪戱紝鍊熷姪浜庣涓夋柟鐨勭被搴擄紝Java寮濮嬫敮鎸佹e垯琛ㄨ揪寮忥紝浣嗚繖浜涚涓夋柟鐨勭被搴撻兘涓嶄竴鑷淬佸吋瀹規у樊錛岃屼笖緇存姢浠g爜璧鋒潵寰堢碂緋曘傝繖涓緙虹偣錛屽規垜閫夋嫨Java浣滀負棣栬佺殑寮鍙戝伐鍏鋒潵璇達紝涓鐩存槸涓宸ㄥぇ鐨勯【鉶戜箣澶勩
浣犲彲浠ユ兂璞★紝褰撴垜鐭ラ亾Sun鐨凧ava JDK 1.40鐗堟湰鍖呭惈浜唈ava.util.regex(涓涓瀹屽叏寮鏀俱佽嚜甯︾殑姝e垯琛ㄨ揪寮忓寘)鏃訛紝鏄澶氫箞鐨勯珮鍏!寰堟悶絎戠殑璇達紝鎴戣姳濂戒簺鏃墮棿鍘繪寲鎺樿繖涓琚闅愯棌璧鋒潵鐨勫疂鐭熾傛垜闈炲父鎯婂囩殑鏄錛孞ava榪欐牱鐨勪竴涓寰堝ぇ鏀硅繘(鑷甯︿簡java.util.regex鍖)涓轟粈涔堜笉澶氬叕寮涓鐐瑰憿?!
鏈榪戱紝Java鍙岃剼閮借煩榪涗簡姝e垯琛ㄨ揪寮忕殑涓栫晫銆俲ava.util.regex鍖呭湪鏀鎸佹e垯琛ㄨ揪涔熸湁瀹冪殑榪囦漢涔嬪勶紝鍙﹀朖ava涔熸彁渚涜︾粏鐨勭浉鍏寵存槑鏂囨。銆備嬌寰楁湨鏈﹁儳鑳х殑regex紲炵樻櫙璞′篃鎱㈡參琚鎷ㄥ紑銆傛湁涓浜涙e垯琛ㄨ揪寮忕殑鏋勬垚(鍙鑳芥渶鏄捐憲鐨勬槸錛屽湪浜庣硡鍚堜簡瀛楃︾被搴)鍦≒erl閮芥壘涓嶅埌銆
鍦╮egex鍖呬腑錛屽寘鎷浜嗕袱涓綾伙紝Pattern(妯″紡綾)鍜孧atcher(鍖歸厤鍣ㄧ被)銆侾attern綾繪槸鐢ㄦ潵琛ㄨ揪鍜岄檲榪版墍瑕佹悳緔㈡ā寮忕殑瀵硅薄錛孧atcher綾繪槸鐪熸e獎鍝嶆悳緔㈢殑瀵硅薄銆傚彟鍔犱竴涓鏂扮殑渚嬪栫被錛孭atternSyntaxException錛屽綋閬囧埌涓嶅悎娉曠殑鎼滅儲妯″紡鏃訛紝浼氭姏鍑轟緥澶栥
鍗充嬌瀵規e垯琛ㄨ揪寮忓緢鐔熸倝錛屼綘浼氬彂鐜幫紝閫氳繃java浣跨敤姝e垯琛ㄨ揪寮忎篃鐩稿綋綆鍗曘傝佽存槑鐨勪竴鐐規槸錛屽歸偅浜涜玃erl鐨勫崟琛屽尮閰嶆墍瀹犲潖鐨凱erl鐙傜儹鐖卞ソ鑰呮潵璇達紝鍦ㄤ嬌鐢╦ava鐨剅egex鍖呰繘琛屾浛鎹㈡搷浣滄椂錛屼細姣斾粬浠鎵浠ュ墠甯哥敤鐨勬柟娉曡垂浜嬩簺銆
鏈鏂囩殑灞闄愪箣澶勶紝瀹冧笉鏄涓綃囨e垯琛ㄨ揪寮忕敤娉曠殑瀹屽叏鏁欑▼銆傚傛灉璇昏呰佸規e垯琛ㄨ揪榪涗竴姝ヤ簡瑙g殑璇濓紝鎺ㄨ崘闃呰籎effrey Frieldl鐨凪astering Regular Expressions錛岃ヤ功鐢監鈥橰eilly鍑虹増紺懼嚭鐗堛傛垜涓嬮潰灝變婦涓浜涗緥瀛愭潵鏁欒昏呭備綍浣跨敤姝e垯琛ㄨ揪寮忥紝浠ュ強濡備綍鏇寸畝鍗曞湴鍘諱嬌鐢ㄥ畠銆
璁捐′竴涓綆鍗曠殑琛ㄨ揪寮忔潵鍖歸厤浠諱綍鐢佃瘽鍙風爜鏁板瓧鍙鑳芥槸姣旇緝澶嶆潅鐨勪簨鎯咃紝鍘熷洜鍦ㄤ簬鐢佃瘽鍙風爜鏍煎紡鏈夊緢澶氱嶆儏鍐點傛墍鏈夊繀欏婚夋嫨涓涓姣旇緝鏈夋晥鐨勬ā寮忋傛瘮濡:(212) 555-1212錛 212-555-1212鍜212 555 1212錛屾煇浜涗漢浼氳や負瀹冧滑閮芥槸絳変環鐨勩
棣栧厛璁╂垜浠鏋勬垚涓涓姝e垯琛ㄨ揪寮忋備負綆鍗曡搗瑙侊紝鍏堟瀯鎴愪竴涓姝e垯琛ㄨ揪寮忔潵璇嗗埆涓嬮潰鏍煎紡鐨勭數璇濆彿鐮佹暟瀛:(nnn)nnn-nnnn銆
絎涓姝ワ紝鍒涘緩涓涓猵attern瀵硅薄鏉ュ尮閰嶄笂闈㈢殑瀛愬瓧絎︿覆銆備竴鏃︾▼搴忚繍琛屽悗錛屽傛灉闇瑕佺殑璇濓紝鍙浠ヨ╄繖涓瀵硅薄涓鑸鍖栥傚尮閰嶄笂闈㈡牸寮忕殑姝e垯琛ㄨ揪鍙浠ヨ繖鏍鋒瀯鎴:(\d{3})\s\d{3}-\d{4}錛屽叾涓\d鍗曞瓧絎︾被鍨嬬敤鏉ュ尮閰嶄粠0鍒9鐨勪換浣曟暟瀛楋紝鍙﹀杮3}閲嶅嶇﹀彿錛屾槸涓綆渚跨殑璁板彿錛岀敤鏉ヨ〃紺烘湁3涓榪炵畫鐨勬暟瀛椾綅錛屼篃絳夋晥浜(\d\d\d)銆\s涔熷彟澶栦竴涓姣旇緝鏈夌敤鐨勫崟瀛楃︾被鍨嬶紝鐢ㄦ潵鍖歸厤絀烘牸錛屾瘮濡係pace閿錛宼ab閿鍜屾崲琛岀︺
鏄涓嶆槸寰堢畝鍗?浣嗘槸錛屽傛灉鎶婅繖涓姝e垯琛ㄨ揪寮忕殑妯″紡鐢ㄥ湪java紼嬪簭涓錛岃繕瑕佸仛涓や歡浜嬨傚筳ava鐨勮В閲婂櫒鏉ヨ達紝鍦ㄥ弽鏂滅嚎瀛楃(\)鍓嶇殑瀛楃︽湁鐗規畩鐨勫惈涔夈傚湪java涓錛屼笌regex鏈夊叧鐨勫寘錛屽苟涓嶉兘鑳界悊瑙e拰璇嗗埆鍙嶆枩綰垮瓧絎(\)錛屽敖綆″彲浠ヨ瘯璇曠湅銆備絾涓洪伩鍏嶈繖涓鐐癸紝鍗充負浜嗚╁弽鏂滅嚎瀛楃(\)鍦ㄦā寮忓硅薄涓琚瀹屽叏鍦頒紶閫掞紝搴旇ョ敤鍙屽弽鏂滅嚎瀛楃(\)銆傛ゅ栧渾鎷鍙峰湪姝e垯琛ㄨ揪涓涓ゅ眰鍚涔夛紝濡傛灉鎯寵╁畠瑙i噴涓哄瓧闈涓婃剰鎬(鍗沖渾鎷鍙)錛屼篃闇瑕佸湪瀹冨墠闈㈢敤鍙屽弽鏂滅嚎瀛楃(\)銆備篃灝辨槸鍍忎笅闈㈢殑涓鏍:
\\(\\d{3}\\)\\s\\d{3}-\\d{4}
鐜板湪浠嬬粛鎬庢牱鍦╦ava浠g爜涓瀹炵幇鍒氭墠鎵璁茬殑姝e垯琛ㄨ揪寮忋傝佽頒綇鐨勪簨錛屽湪鐢ㄦe垯琛ㄨ揪寮忕殑鍖呮椂錛屽湪浣犳墍瀹氫箟鐨勭被鍓嶉渶瑕佸寘鍚璇ュ寘錛屼篃灝辨槸榪欐牱鐨勪竴琛:
import java.util.regex.*;
涓嬮潰鐨勪竴孌典唬鐮佸疄鐜扮殑鍔熻兘鏄錛屼粠涓涓鏂囨湰鏂囦歡閫愯岃誨叆錛屽苟閫愯屾悳緔㈢數璇濆彿鐮佹暟瀛楋紝涓鏃︽壘鍒版墍鍖歸厤鐨勶紝鐒跺悗杈撳嚭鍦ㄦ帶鍒跺彴銆
BufferedReader in;
Pattern pattern = Pattern.compile("\\(\\d{3}\\)\\s\\d{3}-\\d{4}");
in = new BufferedReader(new FileReader("phone"));
String s;
while ((s = in.readLine()) != null)
{
Matcher matcher = pattern.matcher(s);
if (matcher.find())
{
System.out.println(matcher.group());
}
}
in.close();
瀵歸偅浜涚啛鎮夌敤Python鎴朖avascript鏉ュ疄鐜版e垯琛ㄨ揪寮忕殑浜烘潵璇達紝榪欐典唬鐮佸緢騫沖父銆傚湪Python鍜孞avascript榪欎簺璇璦涓錛屾垨鑰呭叾浠栫殑璇璦錛岃繖浜涙e垯琛ㄨ揪寮忎竴鏃︽槑紜鍦扮紪璇戣繃鍚庯紝浣犳兂鐢ㄥ埌鍝閲岄兘鍙浠ャ備笌Perl鐨勫崟姝ュ尮閰嶇浉姣旓紝鐪嬭搗鏉ュ氬氬仛浜嗕簺宸ヤ綔錛屼絾榪欏苟涓嶅緢璐逛簨銆
find()鏂規硶錛屽氨鍍忎綘鎵鎯寵薄鐨勶紝鐢ㄦ潵鎼滅儲涓庢e垯琛ㄨ揪寮忕浉鍖歸厤鐨勪換浣曠洰鏍囧瓧絎︿覆錛実roup()鏂規硶錛岀敤鏉ヨ繑鍥炲寘鍚浜嗘墍鍖歸厤鏂囨湰鐨勫瓧絎︿覆銆傚簲娉ㄦ剰鐨勬槸錛屼笂闈㈢殑浠g爜錛屼粎鐢ㄥ湪姣忚屽彧鑳藉惈鏈変竴涓鍖歸厤鐨勭數璇濆彿鐮佹暟瀛楀瓧絎︿覆鏃躲傚彲浠ヨ偗瀹氱殑璇達紝java鐨勬e垯琛ㄨ揪寮忓寘鑳界敤鍦ㄤ竴琛屽惈鏈夊氫釜鍖歸厤鐩鏍囨椂鐨勬悳緔銆傛湰鏂囩殑鍘熸剰鍦ㄤ簬涓句竴浜涚畝鍗曠殑渚嬪瓙鏉ユ縺璧瘋昏呰繘涓姝ュ幓瀛︿範java鑷甯︾殑姝e垯琛ㄨ揪寮忓寘錛屾墍浠ュ規ゅ氨娌℃湁榪涜屾繁鍏ョ殑鎺㈣ㄣ
榪欑浉褰撴紓浜鍚! 浣嗘槸寰堥仐鎲劇殑鏄錛岃繖浠呮槸涓鐢佃瘽鍙風爜鍖歸厤鍣ㄣ傚緢鏄庢樉錛岃繕鏈変袱鐐瑰彲浠ユ敼榪涖傚傛灉鍦ㄧ數璇濆彿鐮佺殑寮澶達紝鍗沖尯浣嶅彿鍜屾湰鍦板彿鐮佷箣闂村彲鑳戒細鏈夌┖鏍箋傛垜浠涔熷彲鍖歸厤榪欎簺鎯呭喌錛屽垯閫氳繃鍦ㄦe垯琛ㄨ揪寮忎腑鍔犲叆\s?鏉ュ疄鐜幫紝鍏朵腑?鍏冨瓧絎﹁〃紺哄湪妯″紡鍙鑳芥湁0鎴1涓絀烘牸絎︺
絎浜岀偣鏄錛屽湪鏈鍦板彿鐮佷綅鐨勫墠涓変綅鍜屽悗鍥涗綅鏁板瓧闂存湁鍙鑳芥槸絀烘牸絎︼紝鑰屼笉鏄榪炲瓧鍙鳳紝鏇存湁鑳滆咃紝鎴栨牴鏈灝辨病鏈夊垎闅旂︼紝灝辨槸7浣嶆暟瀛楄繛鍦ㄤ竴璧楓傚硅繖鍑犵嶆儏鍐碉紝鎴戜滑鍙浠ョ敤(-|)?鏉ヨВ鍐熾傝繖涓緇撴瀯鐨勬e垯琛ㄨ揪寮忓氨鏄杞鎹㈠櫒錛屽畠鑳藉尮閰嶄笂闈㈡墍璇寸殑鍑犵嶆儏鍐點傚湪()鑳藉惈鏈夌¢亾絎|鏃訛紝瀹冭兘鍖歸厤鏄鍚﹀惈鏈夌┖鏍肩︽垨榪炲瓧絎︼紝鑰屽熬閮ㄧ殑?鍏冨瓧絎﹁〃紺烘槸鍚︽牴鏈娌℃湁鍒嗛殧絎︾殑鎯呭喌銆
鏈鍚庯紝鍖轟綅鍙蜂篃鍙鑳芥病鏈夊寘鍚鍦ㄥ渾鎷鍙峰唴錛屽規ゅ彲浠ョ畝鍗曞湴鍦ㄥ渾鎷鍙峰悗闄勪笂?鍏冨瓧絎︼紝浣嗚繖涓嶆槸涓涓寰堝ソ鐨勮В鍐蟲柟娉曘傚洜涓哄畠涔熷寘鍚浜嗕笉閰嶅圭殑鍦嗘嫭鍙鳳紝姣斿"(555" 鎴 "555)"銆傜浉鍙嶏紝鎴戜滑鍙浠ラ氳繃鍙︿竴縐嶈漿鎹㈠櫒鏉ュ己榪璁╃數璇濆彿鐮佹槸鍚﹀甫鏈夋湁鍦嗘嫭鍙:(\(\d{3}\)|\d{3})銆傚傛灉鎴戜滑鎶婁笂闈浠g爜涓鐨勬e垯琛ㄨ揪寮忕敤榪欎簺鏀硅繘鍚庣殑鏉ユ浛鎹㈢殑璇濓紝涓婇潰鐨勪唬鐮佸氨鎴愪簡涓涓闈炲父鏈夌敤鐨勭數璇濆彿鐮佹暟瀛楀尮閰嶅櫒:
Pattern pattern =
Pattern.compile("(\\(\\d{3}\\)|\\d{3})\\s?\\d{3}(-|)?\\d{4}");
鍙浠ョ『瀹氱殑鏄錛屼綘鍙浠ヨ嚜宸辮瘯鐫榪涗竴姝ユ敼榪涗笂闈㈢殑浠g爜銆
鐜板湪鐪嬬湅絎浜屼釜渚嬪瓙錛屽畠鏄浠嶧riedl鐨勪腑鏀圭紪榪囨潵鐨勩傚叾鍔熻兘鏄鐢ㄦ潵媯鏌ユ枃鏈鏂囦歡涓鏄鍚︽湁閲嶅嶇殑鍗曡瘝錛岃繖鍦ㄥ嵃鍒鋒帓鐗堜腑浼氱粡甯擱亣鍒幫紝鍚屾牱涔熸槸涓璇娉曟鏌ュ櫒鐨勯棶棰樸
鍖歸厤鍗曡瘝錛屽儚鍏朵粬鐨勪竴鏍鳳紝涔熷彲浠ラ氳繃濂藉嚑縐嶇殑姝e垯琛ㄨ揪寮忔潵瀹屾垚銆傚彲鑳芥渶鐩存帴鐨勬槸\b\w+\b錛屽叾浼樼偣鍦ㄤ簬鍙闇鐢ㄥ皯閲忕殑regex鍏冨瓧絎︺傚叾涓\w鍏冨瓧絎︾敤鏉ュ尮閰嶄粠瀛楁瘝a鍒皍鐨勪換浣曞瓧絎︺+鍏冨瓧絎﹁〃紺哄尮閰嶅尮閰嶄竴嬈℃垨澶氭″瓧絎︼紝\b鍏冨瓧絎︽槸鐢ㄦ潵璇存槑鍖歸厤鍗曡瘝鐨勮竟鐣岋紝瀹冨彲浠ユ槸絀烘牸鎴栦換浣曚竴縐嶄笉鍚岀殑鏍囩偣絎﹀彿(鍖呮嫭閫楀彿錛屽彞鍙風瓑)銆
鐜板湪錛屾垜浠鎬庢牱鏉ユ鏌ヤ竴涓緇欏畾鐨勫崟璇嶆槸鍚﹁閲嶅嶄簡涓夋?涓哄畬鎴愯繖涓浠誨姟錛岄渶鍏呭垎鍒╃敤姝e垯琛ㄨ揪寮忎腑鐨勬墍鐔熺煡鐨勫悜鍚庢壂鎻忋傚傚墠闈㈡彁鍒扮殑錛屽渾鎷鍙峰湪姝e垯琛ㄨ揪寮忎腑鏈夊嚑縐嶄笉鍚岀殑鐢ㄦ硶錛屼竴涓灝辨槸鑳芥彁渚涚粍鍚堢被鍨嬶紝緇勫悎綾誨瀷鐢ㄦ潵淇濆瓨鎵鍖歸厤鐨勭粨鏋滄垨閮ㄥ垎鍖歸厤鐨勭粨鏋(浠ヤ究鍚庨潰鑳界敤鍒)錛屽嵆浣塊亣鍒版湁鐩稿悓鐨勬ā寮忋傚湪鍚屾牱鐨勬e垯琛ㄨ揪涓錛屽彲鑳(涔熼氬父鏈熸湜)涓嶆㈡湁涓涓緇勫悎綾誨瀷銆傚湪絎琻涓緇勫悎綾誨瀷涓鍖歸厤緇撴灉鍙浠ラ氳繃鍚戝悗鎵鎻忔潵鑾峰彇鍒般傚悜鍚庢壂鎻忎嬌寰楁悳緔㈤噸澶嶇殑鍗曡瘝闈炲父綆鍗:\b(\w+)\s+\1\b銆
鍦嗘嫭鍙峰艦鎴愪簡涓涓緇勫悎綾誨瀷錛屽湪榪欎釜姝e垯琛ㄧず涓瀹冩槸絎涓緇勫悎綾誨瀷(涔熸槸浠呮湁鐨勪竴涓)銆傚悜鍚庢壂鎻\1錛屾寚鐨勬槸浠諱綍琚\w+鎵鍖歸厤鐨勫崟璇嶃傛垜浠鐨勬e垯琛ㄨ揪寮忓洜姝よ兘鍖歸厤榪欐牱鐨勫崟璇嶏紝瀹冩湁涓涓鎴栧氫釜絀烘牸絎︼紝鍚庨潰榪樿窡鏈変竴涓涓庢ょ浉鍚岀殑鍗曡瘝銆傛敞鎰忕殑鏄錛屽熬閮ㄧ殑瀹氫綅綾誨瀷(\b)蹇呬笉鍙灝戱紝瀹冨彲浠ラ槻姝㈠彂鐢熼敊璇銆傚傛灉鎴戜滑鎯沖尮閰"Paris in the the spring"錛岃屼笉鏄鍖歸厤"Java's regex package is the theme of this article"銆傛牴鎹甹ava鐜板湪鐨勬牸寮忥紝鍒欎笂闈㈢殑姝e垯琛ㄨ揪寮忓氨鏄:Pattern pattern =Pattern.compile("\\b(\\w+)\\s+\\1\\b");
鏈鍚庤繘涓姝ョ殑淇鏀規槸璁╂垜浠鐨勫尮閰嶅櫒瀵瑰ぇ灝忓啓鏁忔劅銆傛瘮濡傦紝涓嬮潰鐨勬儏鍐:"The the theme of this article is the Java's regex package."錛岃繖涓鐐瑰湪regex涓鑳介潪甯哥畝鍗曞湴瀹炵幇錛屽嵆閫氳繃浣跨敤鍦≒attern綾諱腑棰勫畾涔夌殑闈欐佹爣蹇桟ASE_INSENSITIVE :
Pattern pattern =Pattern.compile("\\b(\\w+)\\s+\\1\\b",
Pattern.CASE_INSENSITIVE);
鏈夊叧姝e垯琛ㄨ揪寮忕殑璇濋樻槸闈炲父涓板瘜錛岃屼笖澶嶆潅鐨勶紝鐢↗ava鏉ュ疄鐜頒篃闈炲父騫挎硾錛屽垯闇瑕佸箁egex鍖呰繘琛岀殑褰誨簳鐮旂┒錛屾垜浠鍦ㄨ繖閲屾墍璁茬殑鍙鏄鍐板北涓瑙掋傚嵆浣誇綘瀵規e垯琛ㄨ揪寮忔瘮杈冮檶鐢燂紝浣跨敤regex鍖呭悗浼氬緢蹇鍙戠幇瀹冨己澶у姛鑳藉拰鍙浼哥緝鎬с傚傛灉浣犳槸涓鏉ヨ嚜Perl鎴栧叾浠栬璦鐜嬪浗鐨勮佺粌鐨勬e垯琛ㄨ揪寮忕殑榛戝錛屼嬌鐢ㄨ繃regex鍖呭悗錛屼綘灝嗕細瀹夊績鍦版姇鍏ュ埌java鐨勪笘鐣岋紝鑰屾斁寮冨叾浠栫殑宸ュ叿錛屽苟鎶妀ava鐨剅egex鍖呯湅鎴愭槸鎵嬭竟蹇呭囩殑鍒╁櫒銆
『伍』 怎麼用java寫一個正則表達式去匹配包含一個或多個「*」的字元串
在Java中編寫正則表達式以匹配包含一個或多個星號(*)的字元串,可以採用以下方式:
Pattern pattern = Pattern.compile("^[^\\*]*\\*+.*$");
Matcher matcher = pattern.matcher(你要匹配的字元串);
if(matcher.matches()) {
//TODO:匹配
}
else {
//TODO:不匹配
}
這段代碼設計用來檢測給定的字元串是否至少包含一個星號(*)。它首先定義了一個Pattern對象,用於匹配以零個或多個非星號字元開頭,接著是至少一個星號,最後是任意數量的任何字元。
如果你的目標僅僅是檢查字元串中是否包含一個星號,那麼直接使用contains("*")或indexOf("*") > 0會更為簡潔和高效。然而,上述正則表達式提供了一種更靈活的方法,能夠滿足更復雜的匹配需求。
例如,當你需要確保字元串至少包含一個星號,並且星號前後有特定的字元模式時,這個正則表達式就顯得非常有用。
希望這段解釋能幫助你理解如何在Java中使用正則表達式來匹配包含一個或多個星號的字元串。
值得注意的是,正則表達式中的每個符號都有其特定的含義:
^:匹配字元串的開始。
[^\\*]*:匹配零個或多個非星號字元。
\\*+:匹配至少一個星號。
.*:匹配零個或多個任意字元。
$:匹配字元串的結束。
通過組合這些符號,你可以構建出滿足各種復雜匹配需求的正則表達式。
如果你有任何疑問或需要進一步的幫助,請隨時提出。