嘗試為 Minecraft mods 創建更新腳本,并且需要能夠從 mods 中洗掉所有版本號以搜索新版本。
我已經讓它作業到了一定程度,但被困在最后一部分。我不能讓它從那行我需要 cfm pre (25 是我不想要的內部版本號)
[A-Za-z].*?(?=-[0-9])|(?<= ).*(?= )|([s].*?[k])|([f].*?[e])
1.17.1-additionalbars-2.1.0.jar
'[1.17.1] SecurityCraft v1.8.23-beta5.jar'
absentbydesign-1.17.1-1.6.0.jar
additionalbarsbop-2.1.0.jar
AdditionalEnchantedMiner-1.17-17.6-SNAPSHOT.jar
additionallanterns-1.0.0a-mc1.17.jar
cfm-7.0.0pre25-1.17.1.jar
Croptopia-1.17-FORGE-1.6.2.jar
nekoration-1.17.X-1.4.0.jar
ScalableCatsForce-2.13.6-build-4-with-library.jar
spark-forge.jar
treeharvester_1.17.1-3.2.jar
uj5u.com熱心網友回復:
我發現僅通過模式很難提取“pre”。在“pre”所在的同一位置也可能有“build”或“mc1”或您碰巧不需要的任何命名約定。
我做了一個不同的正則運算式,前后跳躍較少,這似乎很好地找到了 mod 名稱,并使用捕獲組明確地找到了“pre”。
請參閱 regex101 上的作業示例
/^([\[\]\'\.0-9 -]*)([a-zA-Z0-9]*)[-_]*([v\.0-9 -]*)(pre|FORGE)?([\.0-9 a-zA-Z-]*)\.jar.*/
輸入
1.17.1-additionalbars-2.1.0.jar
'[1.17.1] SecurityCraft v1.8.23-beta5.jar'
absentbydesign-1.17.1-1.6.0.jar
additionalbarsbop-2.1.0.jar
AdditionalEnchantedMiner-1.17-17.6-SNAPSHOT.jar
additionallanterns-1.0.0a-mc1.17.jar
cfm-7.0.0pre25-1.17.1.jar
Croptopia-1.17-FORGE-1.6.2.jar
nekoration-1.17.X-1.4.0.jar
ScalableCatsForce-2.13.6-build-4-with-library.jar
spark-forge.jar
treeharvester_1.17.1-3.2.jar
結果
additionalbars
SecurityCraft
absentbydesign
additionalbarsbop
AdditionalEnchantedMiner
additionallanterns
cfm pre
Croptopia FORGE
nekoration
ScalableCatsForce
spark
treeharvester
我(pre|FORGE)以要明確搜索哪些詞為例。
對于這種情況,它作業得很好。如果您愿意,可以使用 regex101 鏈接進行試驗。
uj5u.com熱心網友回復:
模式中的這部分匹配太多,因為這部分.*?(?=-[0-9])匹配盡可能少的字符,直到它可以斷言-[0-9]到右側,這將匹配 pre25pre25-1
您可以更新模式以匹配匹配由點分隔的數字的可選部分,并在正向前瞻中添加斷言可選數字在開頭[A-Za-z_] (?:\d (?:\.\d ) )?(?=[0-9]*-[0-9])到達連字符后跟一個數字。
您可以.*?在空格之間進行非貪婪匹配,因為.*在更多空格的情況下可以過度匹配。
更新后的模式(如果您只想要匹配,則沒有捕獲組)可能看起來像
[A-Za-z_] (?:\d (?:\.\d ) )?(?=[0-9]*-[0-9])|(?<= ).*?(?= )|s.*?k|f.*?e
正則運算式演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/341637.html
標籤:正则表达式
下一篇:正則運算式驗證10位電話號碼
