[英]Regular expression to get a match or replace a subString
我需要匹配或替換字符串的一部分,如下所示,但我無法在Java中為其編寫確切的正則表達式。
串:
text1${text2${text3}text4}text5
預期的正則表達式應單獨匹配test3。 “內部” $ {}中的所有內容。 上例中有一個外部$ {...}和一個內部$ {...},例如... $ {... $ {...} ...}...。test3位於“內部的$ {}是我想要的。
以下正則表達式捕獲$ {...}中的全部內容,而不僅僅是“內部” $ {...}的內容
\$\{(.*?)\}
更多示例:
text1${text2${text3}text4}text5 - match "text3"
text1text2${text3}text4text5 - should not match anything
text1${text2${text3}text4text5 - should not match anything
更新:
text1${text2${text3}${text4}text5} - match "text3" and "text4"
首先 ,你需要匹配第一之間的整個{
最后}
之后,你可以匹配你想通過比賽組 什么 。
你想要什么
{.*\\{(.*?)\\}.*?\\}
第一步,它匹配{text2${text3}
,然后您應該使用math-group
我對Java不熟悉,但是對Perl和C ++有點了解,我認為它可以在Java中使用,因為它既簡單又不復雜
用Perl測試
echo 'text1${text2${text3}text4}text5' | perl -lne '/\\{.*\\{(.*?)\\}.*?\\}/ && print $1'
產量
text3
因此,在您的Java代碼中使用$1
就可以了。
為了您的更新,你寫的,你有2只選擇一個具有loop
在你的字符串和其他四個match-group
首先有一個while循環
echo 'text1${text2${text3}${text4}text5}' | perl -lne 'print $2 while /(\\${)(\\w+)(\\$?})/g'
text3
text4
它是如何工作的? 很容易。 它首先匹配${text3}
,這里\\w+
將是text3,然后繼續並匹配${text4}
然后再次\\w+
將是text4
(\\${)(\\w+)(\\$?})
證明
第二個非循環
echo 'your-string' | perl -lne ' /(\\${)(\\w+)(\\$?})\\1(\\w+)\\3/g && print $2," ",$4'
這個也容易。 它首先匹配text3 ,然后匹配text4 ,並將它們放在$2
和$4
。 而已。
(\\${)(\\w+)(\\$?})\\1(\\w+)\\3
證明
注意
使用while循環時,您需要使用g標志,並且不能忽略它,但是第二次沒有問題。
再次
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.