簡體   English   中英

正則表達式\\ w字符類和等號

[英]Regular Expressions \w character class and equals sign

我正在創建一個正則表達式來匹配字符串

@servername:端口:數據庫名稱

並通過https://regex101.com/我想到了

\\ @(((\\ w + * - *)+)\\ w +?)(:\\ d +)(:\\ w +)

哪個匹配

例如@ CORA-PC:1111:databasename或@ 111.111.1.111:111:databasename

但是,當我在Java代碼中使用此正則表達式進行模式匹配時,字符串@ CORA-PC:1111:database = name也會被匹配。

為什么\\ w匹配=等號? 我也嘗試過[0-9a-zA-Z],但它也匹配了=等號?

誰能幫我這個? 謝謝!

.*是貪婪點匹配子模式,它與整行匹配,然后回溯以適應后續的子模式。 這就是為什么模式可以匹配=符號的原因(請參閱演示 -組3使用=匹配該部分)。

您的模式相當脆弱,因為第一部分包含帶有可選子模式的嵌套量詞,這會減慢正則表達式的執行速度並引起其他問題 您需要使其更加線性。

@(\w+(?:[-.]\w+)*)?(:\d+)(:\w+)

請參閱正則表達式演示

正則表達式將匹配

  • @ - @符號
  • (\\w+(?:[-.]\\w+)*)? -可選的組匹配
    • \\w+ - 1+單詞字符
    • (?:[-.]\\w+)* -(?:[-.]\\w+)* 0+序列. [-.] )后跟1個以上的字符字符
  • (:\\d+) -a :后跟1個數字的符號
  • (:\\w+) -a :符號后跟1+個單詞字符

如果需要避免部分匹配,請使用String#matches() (請參見demo )。

注意 :在Java中,反斜杠必須加倍。

代碼示例( Java ):

String s = "@CORA-PC:1111:databasename";
String rx = "@(?:\\w+(?:[-.]\\w+)*)?:\\d+:\\w+";
System.out.println(s.matches(rx));

代碼示例(JS):

 var str = '@CORA-PC:1111:databasename'; alert(/^@(?:\\w+(?:[-.]\\w+)*)?:\\d+:\\w+$/.test(str)); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM