正则表达式(匹配第一个花括号)

学习正则,工作中使用正则让我对“^”有了新的认知:

正则中^匹配输入字符串的开始位置,除非在[]方括号表达式中使用,此时表示不接受该字符集合。

废话不多说,直接看栗子吧,

如下图所示,需要匹配第一个花括号前的地址
这里写图片描述

[^}] 除了“}”以外的任何字符

[^}]* 0或多个非“}”的字符

^[^}]* 从左向右匹配非“}”的多个字符

^[^}]*\} 从左向右匹配第一个包含“}”的字符串

这里写图片描述


正则表达式匹配大括号里面的内容

方法一: {[^}]+}

var str = "aa ds sdf {asdf asdfag }";
var str1 = str.match(/\{[^\}]+\}/)[0];

方法二: /{[\S\s]+}/或者/{(.|\r\n)+}/

注:\S\s可是微软文档中对\n匹配的标准用法哦

var str = "aa ds sdf {asdf asdfag }";
var str1 = str.match(/\{[\S\s]+\}/)[0];

如何利用正则表达式匹配花括号内的内容

匹配花括号内的内容

Input: {abc}, Output: abc

正则表达式: (?<=\{)[^}]*(?=\})

(?<=\{) 匹配以左花括号开头
[^}]* 取得内容
(?=\}) 匹配以右花括号结束

private List<String> GetTokens(String str)
{
    Regex regex = new Regex(@"(?<=\{)[^}]*(?=\})", RegexOptions.IgnoreCase);
    MatchCollection matches = regex.Matches(str);

    // Results include braces (undesirable)
    return matches.Cast<Match>().Select(m => m.Value).Distinct().ToList();
}

java正则表达式匹配小括号内的内容

经常用到正则匹配小括号内容,在此摘录下来

String content = "src: local('Open Sans Light'), local('OpenSans-Light'), url(http://fonts.gstatic.com/s/opensans/v13/DXI1ORHCpsQm3Vp6mXoaTa-j2U0lmluP9RWlSytm3ho.woff2) format('woff2')";
// 从内容上截取路径数组
Pattern pattern = Pattern.compile("(?<=\\()[^\\)]+");  
Matcher matcher = pattern.matcher(content);
while(matcher.find()){
   System.out.println(matcher.group());
}

输出

'Open Sans Light'
'OpenSans-Light'
http://fonts.gstatic.com/s/opensans/v13/DXI1ORHCpsQm3Vp6mXoaTa-j2U0lmluP9RWlSytm3ho.woff2
'woff2'

还有一种情况是,我们只匹配url里面的内容,比如要匹配的字符串是

String content = "local('OpenSans-Light'),url(http://fonts.gstatic.com/s/opensans/v13/DXI1ORHCpsQm3Vp6mXoaTa-j2U0lmluP9RWlSytm3ho.woff2) format('woff2');unicode-range:U+0460-052F,U+20B4,U+2DE0-2DFF,U+A640-A69F;}@font-face{font-family:'Open Sans';font-style:normal;font-weight:300;src:local('Open Sans Light'),local('OpenSans-Light'),url(http://fonts.gstatic.com/s/opensans/v13/DXI1ORHCpsQm3Vp6mXoaTZX5f-9o1vgP2EXwfjgl7AY.woff2) format('woff2');unicode-range:U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;}@font-face{font-family:'Open Sans';font-style:normal;font-weight:300;src:local('Open Sans Light'),local('OpenSans-Light'),url(http://fonts.gstatic.com/s/opensans/v13/DXI1ORHCpsQm3Vp6mXoaTRWV49_lSm1NYrwo-zkhivY.woff2) format('woff2');unicode-range:U+1F00-1FFF;}@font-face{font-family:'Open Sans';font-style:normal;font-weight:300;src:local('Open Sans Light'),local('OpenSans-Light'),url(http://fonts.gstatic.com/s/opensans/v13/DXI1ORHCpsQm3Vp6mXoaTaaRobkAwv3vxw3jMhVENGA.woff2) format('woff2');";

然后将正则规则修改为

Pattern pattern = Pattern.compile("(?<=url\\()[^\\)]+"); 

这样就能匹配如下内容了

http://fonts.gstatic.com/s/opensans/v13/DXI1ORHCpsQm3Vp6mXoaTa-j2U0lmluP9RWlSytm3ho.woff2
http://fonts.gstatic.com/s/opensans/v13/DXI1ORHCpsQm3Vp6mXoaTZX5f-9o1vgP2EXwfjgl7AY.woff2
http://fonts.gstatic.com/s/opensans/v13/DXI1ORHCpsQm3Vp6mXoaTRWV49_lSm1NYrwo-zkhivY.woff2
http://fonts.gstatic.com/s/opensans/v13/DXI1ORHCpsQm3Vp6mXoaTaaRobkAwv3vxw3jMhVENGA.woff2

正则中使用了零宽度断言


用正则表达式匹配两个字符中间的文本

    String skh ="(?<=\\《)[^\\》]+";//用于匹配《》里面的文本
    String str="但实际上《kajdwdej》孙大伟多";//测试字符串
    Pattern pattern=Pattern.compile(skh);
            Matcher matcher=pattern.matcher(str);
            boolean is=matcher.find();
        if(is)System.out.print(matcher.group());

输出结果为:kajdwdej

同理将skh字符串中换成对应所要匹配的两个字符,就可以匹配两个字符中间的文本


正则获取HTML代码中imgsrc地址

/// <summary> 
/// 获得HTML中所有图片的src地址
/// </summary> 
/// <param name="sHtmlText">HTML代码</param> 
/// <returns>图片的URL列表</returns> 
public static string[] GetHtmlImageUrlList(string sHtmlText)
{
    // 定义正则表达式用来匹配 img 标签 
    Regex regImg = new Regex(@"<img\b[^<>]*?\bsrc[\s\t\r\n]*=[\s\t\r\n]*[""']?[\s\t\r\n]*(?<imgUrl>[^\s\t\r\n""'<>]*)[^<>]*?/?[\s\t\r\n]*>", RegexOptions.IgnoreCase);
    // 搜索匹配的字符串 
    MatchCollection matches = regImg.Matches(sHtmlText);
    int i = 0;
    string[] sUrlList = new string[matches.Count];
    // 取得匹配项列表 
    foreach (Match match in matches)
        sUrlList[i++] = match.Groups["imgUrl"].Value;
    return sUrlList;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值