亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何處理Java正則表達式?

如何處理Java正則表達式?

慕婉清6462132 2023-03-17 17:13:58
我正在處理正則表達式,但我不是它的忠實粉絲,我有義務在我的任務中處理它:(我已經花了幾個小時尋找解決方案,但每次我都無法涵蓋所有情況。我必須編寫一個支持這些模式的正則表達式模板: DYYU-tx-6.7.9.7_6.1.1.0   DYYU-tx-6.7.9.7_60.11.11.09   DYYU-tx-60.70.90.70_6.1.1.0我覺得這很簡單。如果這對某人來說是個愚蠢的問題,請原諒:(我試過這種模式,但沒有用: ^.*_.*-.*-([0-9]*)\\..*\\..* $請任何幫助。我將不勝感激。
查看完整描述

4 回答

?
收到一只叮咚

TA貢獻1821條經驗 獲得超5個贊

示例中有很多模式可以用來設計表達式。例如,我們可以從這個表達式開始:

^[^-]+-[^-]+-[^_]+_([0-9]+\.){3}[0-9]+$

表達式在這個演示的右上角面板上有解釋,如果你想探索/簡化/修改它,并且在這個鏈接中,如果你愿意,你可以觀看它如何逐步匹配一些示例輸入。

測試

import java.util.regex.Matcher;

import java.util.regex.Pattern;


final String regex = "^[^-]+-[^-]+-[^_]+_([0-9]+\\.){3}[0-9]+$";

final String string = "DYYU-tx-6.7.9.7_6.1.1.0\n"

     + "DYYU-tx-6.7.9.7_60.11.11.09\n"

     + "DYYU-tx-60.70.90.70_6.1.1.0";


final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);

final Matcher matcher = pattern.matcher(string);


while (matcher.find()) {

    System.out.println("Full match: " + matcher.group(0));

    for (int i = 1; i <= matcher.groupCount(); i++) {

        System.out.println("Group " + i + ": " + matcher.group(i));

    }

}

正則表達式電路

jex.im可視化正則表達式:

http://img1.sycdn.imooc.com//64142f80000142a511230217.jpg


查看完整回答
反對 回復 2023-03-17
?
慕森王

TA貢獻1777條經驗 獲得超3個贊

試試這個:

^\w+-\w+-(\d+)(\.\d+)+_(\d+\.)+\d+

演示

在 Java 中很可能是這樣的:

"^\\w+-\\w+-(\\d+)(\\.\\d+)+_(\\d+\\.)+\d+"

解釋:

  • ^\w+-\w+-前兩部分,例如DYYU-tx-

  • (\d+)(\.\d+)+_.以結尾分隔的數字_,例如6.7.9.7_

  • (\d+\.)+\d+用 分隔的數字.,例如60.11.11.09


查看完整回答
反對 回復 2023-03-17
?
鴻蒙傳說

TA貢獻1865條經驗 獲得超7個贊

您的模式不匹配,因為您使用.*which 將首先匹配直到字符串末尾。然后你匹配一個_所以它回溯到最后一個下劃線并嘗試匹配模式的其余部分。

因為有 1 個下劃線,所以你想匹配它后面的連字符,但是下劃線后面沒有連字符可以匹配,所以沒有匹配。

另一種編寫它的方法可能是使用否定字符類 [^-]匹配而不是連字符而不是使用.*

^[^-]+-[^-]+-\d+(?:\.\d+){3}_\d+(?:\.\d+){3} $

解釋

  • ^字符串的開始

  • [^-]+-匹配 1+ 次除以下以外的任何字符-

  • [^-]+-同上

  • \d+(?:\.\d+){3}數學 1+ 數字,重復 3 次匹配 a.和 1+ 數字

  • _匹配下劃線

  • \d+(?:\.\d+){3}數學 1+ 數字,重復 3 次匹配 a.和 1+ 數字

  • [ ]$匹配一個空格(為清楚起見在括號之間表示)并斷言字符串結尾

在爪哇

String regex = "^[^-]+-[^-]+-\\d+(?:\\.\\d+){3}_\\d+(?:\\.\\d+){3} $";

正則表達式演示

請注意,在您的示例數據中,字符串以空格結尾,因此之前有一個空格$


查看完整回答
反對 回復 2023-03-17
?
FFIVE

TA貢獻1797條經驗 獲得超6個贊

DYYU-tx-(?>\d+[._]?){8}
  1. 搜索文字 DYYU-tx-

  2. 尋找 1 個或多個后面可能跟有 a._8 次的數字。

我假設它總是以 DYYU-tx- 開頭,并且它總是 4 個數字,用句點分隔,后跟一個下劃線,然后再有 4 個數字,用句點分隔。


查看完整回答
反對 回復 2023-03-17
  • 4 回答
  • 0 關注
  • 131 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號