在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/Java/ 正則匹配{字符

正則匹配{字符

1.需求在一串字符中匹配{字符,但僅僅只匹配{字符
例如下列字符串中:
“{sfadf{{afad{}”
需要匹配到第一個(gè){和第四個(gè){,但不能匹配到第二個(gè)和第三個(gè)
2.目前我的正則如下,但不成功

[^{\b]({)[^{\b]

會(huì)把{前后的字符各匹配一個(gè),但我不想要這樣
3.我應(yīng)該如何做,多謝

只匹配{字符,無(wú)論在任何地方,但不可以是連續(xù)的{{

回答
編輯回答
默念

使用 lookahead 和 lookbehind 即可

(?<!\{)\{(?!\{)

對(duì)于不支持 lookbehind 的語(yǔ)言,可以把 lookbehind 換成普通的匹配,匹配再后手動(dòng)處理

2017年6月3日 12:07
編輯回答
溫衫

先說(shuō)用Java如何實(shí)現(xiàn)

public class GenericApp {
    
    public static void main(String[] args) {
        String str = "{sfadf{{{{afad{}";
        String regex = "(?<!\\{)\\{(?!\\{)";
        Pattern pattern = Pattern.compile(regex);
        Matcher m = pattern.matcher(str);
        while(m.find()) {
            System.out.println(m.group(0));
        }
    }
}

這里使用了negative lookbehindnegative lookahead。
但是JavaScript并沒(méi)有negative lookbehind,那么如果只是使用negative lookahead的特性,
匹配的結(jié)果多了一個(gè){

clipboard.png
多的是哪一個(gè)呢

clipboard.png
當(dāng)匹配到中間位置的這個(gè){時(shí)候往前看沒(méi)有{,但是它沒(méi)有往后看。
所以說(shuō)題主這個(gè)需求用javascript來(lái)寫(xiě)有一定難度

2017年5月10日 16:41
編輯回答
久不遇

簡(jiǎn)化需求就是:
匹配字符"{", 其前后都不能有"{"。
1、匹配字符"{"

\{

2、其前不能有"{"

(?<!\{)\{

3、其后不能有"{"

 \{(?!\{)

組合起來(lái)就是:

(?<!\{)\{(?!\{)

clipboard.png

2017年10月3日 12:39
編輯回答
笑浮塵
var result = [];
var str = '{sfadf{{afad{}';
var reg = /{+/g;
str.replace(reg, function (msg) {
    if (!/{{2,}/.test(msg)) {
        result.push(msg)
    }
})
console.log(result)//["{", "{"]

兩個(gè)以上不管 一個(gè)的話(huà)替換成兩個(gè)

var str = '{sfadf{{{{afad{}';
var reg = /{+/g;
console.log(str.replace(reg, msg => /{{2,}/.test(msg) ? msg : "{{"))//{{sfadf{{{{afad{{}
2018年2月2日 12:31