学习正则,工作中使用正则让我对“^
”有了新的认知:
正则中^
匹配输入字符串的开始位置,除非在[]
方括号表达式中使用,此时表示不接受该字符集合。
废话不多说,直接看栗子吧,
如下图所示,需要匹配第一个花括号前的地址
[^}]
除了“}
”以外的任何字符
[^}]*
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代码中img
的src
地址
/// <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;
}