簡體   English   中英

在Java中使用正則表達式使用不可打印的字符

[英]use regex in java with non printable chars

我正在使用在這里找到的正則表達式( link )來提取正常工作的域字符串。

正則表達式是

^((?!-)[A-Za-z0-9-]{1,63}(?<!-)\\.)+[A-Za-z]{2,6}$

我想知道,如何更改它以匹配包含不可打印字符而不是點(。)的域?

我知道正則表達式代碼類似於\\ x01,\\ x02等。但是,如果我用其中之一替換點,則正則表達式不再匹配

提前致謝

您的點在這里逃脫了。

您需要刪除雙轉義符( \\\\ )並將點替換為文字以使其匹配。

您也可以刪除雙轉義符並保留與任何字符匹配的點。

將匹配任何單個字符,無論它是否可打印。 您當前的群組[A-Za-z0-9-]對其進行了限制。 您可以將其更改為“除文字點以外的任何字符” ...即[^。]。

Pattern regex = Pattern.compile("^((?!-)[^.]{1,63}(?<!-)\\.)+[A-Za-z]{2,6}$");
System.out.println(regex.matcher("\u0001\u0002\u0003\u0004..com").find()); // => false
System.out.println(regex.matcher("\u0001\u0002\u0003\u0004.com").find()); // => true
System.out.println(regex.matcher("google.com").find()); // => true

如果您嘗試驗證IDN(國際域名)的用戶輸入,請注意,有一些新的gTLD包含非字母數字字符,例如.شبكة(.network)。

暫無
暫無

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

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