2017-02-22 61 views
1

我想在Java中寫一個正則表達式獲取所有兩位數字(兩位數字不能以0開頭),它不會在前面和隨後是一個角色。正則表達式獲得2位數字不立即前面和後面跟着一個字符在java

舉例來說,我想在下面的字符串匹配數30:

  • character30 wordstart
  • wordstart 30character
  • 30的數量就在這裏

但不希望到以下:

  • character30character

我想使用一下變通做到這一點,到目前爲止,我來最接近的是: (?<!\w)(1[2-9]|[2-9][0-9])(?!([\w]))

的兩位數字不能以0開始,我不想要在三位數字內匹配2位數字。

+2

[\ b \ d {2} | \ d {2} \ b'](https://regex101.com/r/4VgGMU/1)怎麼辦? –

+1

讓我們知道它是否有效。像這樣的問題可以以不同的方式回答。如果你至少需要在一個單詞邊界上使用空格,你需要使用(?<!\ S)\ d {2}(?!\ d)|(?<!\ d)\ d {2} !\ S)'。 –

+0

另一個想法是匹配字母中的兩個數字序列並捕獲其他字符:\ p {L} \ d {2} \ p {L} |(?<!\ d)\ d {2}(?!\ d)' –

回答

1

您可以使用下面的正則表達式:

(?<!\S)[1-9]\d(?!\d)|(?<!\d)[1-9]\d(?!\S) 

記住要加倍反斜槓時在Java字符串文字中定義正則表達式模式。

的模式匹配:

  • (?<!\S) - 從1位到9,然後任何一個數字
  • (?!\d) - - 下一個數字必須以串
  • 的空白或開始
  • [1-9]\d前面的兩位數字不能跟隨另一個數字
  • | - 或
  • (?<!\d) - 不能是數字權之前...
  • [1-9]\d - 數字從1到9,然後任何一個數字
  • (?!\S) - 應遵循的空格或字符串的結尾。
0

下面的代碼只是簡單地測試Wiktor的在Java的評論:

import java.text.SimpleDateFormat; 
import java.util.Locale; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class TestIt 
{ 
    public static void main (String args[]) 
     throws Exception 
    { 
     String test1 = "character30 wordstart"; 
     String test2 = "wordstart 30character"; 
     String test3 = "the number 30 is here"; 

     String failTest = "character30character"; 

     String regex = "\\b\\d{2}|\\d{2}\\b"; 

     Pattern pat = Pattern.compile(regex); 
     Matcher match = pat.matcher(test1); 
     System.out.println("test1: " + match.find()); 
     match = pat.matcher(test2); 
     System.out.println("test2: " + match.find()); 
     match = pat.matcher(test3); 
     System.out.println("test3: " + match.find()); 
     match = pat.matcher(failTest); 
     System.out.println("failTest: " + match.find()); 
    } 
} 

有了結果:

test1: true 
test2: true 
test3: true 
failTest: false 
相關問題