2012-11-30 71 views
0

我正在使用java,其中我必須使用正則表達式檢查輸入字符串。 我是新手到正則表達式。正則表達式匹配字符串模式提及

我在表單中輸入輸入。

以下是我需要寫下正則表達式的示例數據。

LastName FirstName 

Ab.CD   BC 
Ab-CFgD   Ab.CD 
F'b-CF gD  BC 
F'b-CF gD.  F.b-CF gD'D 
Fb-CF gD'D  BC 
F.b-CF gD'D  F'b-CF gD 

意味着它包含dot(.), Hiphen(-), And single quotes(')之間的姓氏和名字。

我已經寫下regexx只爲「姓,名」。

"[a-zA-Z]+, *[a-zA-Z]+" 

將正則表達式是什麼發現上面的表格中提到的所有字符串

+2

你的解釋對於這些例子是不完整的。看起來你可以在名稱中包含空格(來自示例),並且逗號後跟空格似乎是名稱的分隔符,但它沒有正式指定。好,完整的規範是正確地解決問題的關鍵...... – PhiLho

回答

0

試試這個: -

"([a-zA-Z.'-]+),[ ]*([a-zA-Z.'-]+)" 

說明: -

(   // Capture group 1 
    [   // Character class 
    a-zA-Z // alphabets 
    .  // a Dot 
    '  // A quote 
    -  // A hyphen (Should be at the end, in the middle it means a range 
    ]+   // Character class close. One or more repetition 
)   // Group 1 closes 

好像有也是你的姓氏或名字之間的空格,如你的例子所給出的。請檢查它是否正確。

您在上述正則表達式中有two capture groups。這兩個組捕獲firstnamelastname。你可以打印他們兩個。

樣品運行了一些字符串: -

String str1 = "Ab.CD, Ab.CD"; 
String str2 = "F'b-CFgD., F'b-CFgD."; 
String str3 = "F'b-CF gD, F'b-CF gD"; 

System.out.println(str1.matches("([a-zA-Z.'-]+),[ ]*([a-zA-Z.'-]+)")); // true 
System.out.println(str2.matches("([a-zA-Z.'-]+),[ ]*([a-zA-Z.'-]+)")); // true 
System.out.println(str3.matches("([a-zA-Z.'-]+),[ ]*([a-zA-Z.'-]+)")); //false 

正如你所看到的,最後一個印刷錯誤的,因爲有你的第三根弦之間的空間。如果你想要匹配空間,然後將它添加到你的角色類。


要確保firstnamelastname只能用字母開頭的,你可以修改你的正則表達式是這樣的: -

"([a-zA-Z][a-zA-Z.'-]+),[ ]*([a-zA-Z][a-zA-Z.'-]+)" 

新增[a-zA-Z]在這兩個模式的開始,以確保第一字符來自給定的字母範圍。

+0

它應該檢查姓氏,名字始終始於字符而不是單引號,點和時髦? – Raje

+0

@Raje ..你需要修改一下。你沒有在問題中說明。將編輯正則表達式。 –

+0

姓氏,名字之間有逗號(,)。 – Raje

0

"([a-zA-Z\\.\\-\\']*),\\s*([a-zA-Z\\.\\-\\']*)"

使用該網址與正則表達式玩到圖什麼會爲你工作。

Regex Test Site

+0

不需要在字符類中轉義'.'它被視爲字符類中的文字 – Anirudha

+0

如上所示,不需要在char類中轉義所有這些字符:即使 - 是安全的,如果它是最後一個字符[]。然後只有\和]真正需要轉義(並且,不知何故,「也是)。 – PhiLho

+0

採取點.... –

相關問題