<script language=javascript>
document.s.q.focus();
</script>
s是form名,q是<input名
经典JavaScript正则表达式实战
菜鸟(http://www.cainiao8.com/ )
邮箱:runningtortoise@hotmail.com
目录
正则表达式实战… 1
匹配结尾的数字… 2
统一空格个数… 3
判断字符串是不是由数字组成… 3
电话号码正则… 3
手机号码正则表达式… 4
使用正则表达式实现删除字符串中的空格:… 4
限制文本框只能输入数字和小数点等等… 5
替换小数点前内容为指定内容… 5
只匹配中文的正则表达式… 5
返回字符串的中文字符个数… 6
正则表达式取得匹配IP地址前三段… 6
匹配<ul>与<ul>之间的内容… 7
用正则表达式获得文件名… 7
绝对路径变相对路径… 8
用户名正则… 8
匹配英文地址… 8
正则匹配价格… 9
身份证号码的匹配… 10
要求文本有指定行数… 10
单词首字母大写… 10
正则验证日期格式… 11
去掉文件的后缀名… 12
验证邮箱的正则表达式… 12
匹配源代码中的链接… 13
匹配链接的文字… 14
正则判断标签是否闭合… 14
用正则获得指定标签的内容… 15
正则判断是否为数字与字母的混合… 16
空格与英文同时存在… 17
显示或者保存正则表达式匹配的部分内容… 18
正则表达式替换变量… 18
正则替换指定属性中的文本… 19
将阿拉伯数字替换为中文大写形式… 20
替换文本中的URL为链接… 21
从HTML代码段删除指定标签极其内容… 21
用正则给文本分段… 22
转换源代码中的标签… 22
给属性添加双引号… 23
给table加上tbody. 25
去掉标签的所有属性… 25
正则替换特定单词… 25
指定文字高亮显示… 26
删除标签… 27
错误贴… 28
太难贴… 28匹配数字的“正则”. 28
正则资源… 28
匹配结尾的数字
来源:如何用 JAVASCRIPT 正则表达式 取出字符串最后一组数字,谢谢
如
30CAC0040 取出40
3SFASDF92 取出92
正则如下:/\d+$/g
统一空格个数
来源:正则匹配空格的问题
字符串内字符键有空格,但是空格的数量可能不一致,通过正则将空格的个数统一变为一个。
例如:蓝 色 理 想
变成:蓝 色 理 想
aobert的正则:
<script>
var str=”蓝 色 理 想”
var reg=/\s+/g
str = str.replace(reg,” “)
document.write(str)
</script>
判断字符串是不是由数字组成
来源:有没有简单的方法判断字符串由数字组成?
这个正则比较简单,写了一个测试
<script type=”text/javascript”>
function isDigit(str){
var reg = /^\d*$/;
return reg.test(str);
}
var str = “7654321″;
document.write(isDigit(str));
var str = “test”;
document.write(isDigit(str));
</script>
电话号码正则
来源:想问一下关于电话号码的正则判断
:求一个验证电话号码的JS正则
/^\d{3,4}-\d{7,8}(-\d{3,4})?$/
区号必填为3-4位的数字,区号之后用“-”与电话号码连接
^\d{3,4}-
电话号码为7-8位的数字
\d{7,8}
分机号码为3-4位的数字,非必填,但若填写则以“-”与电话号码相连接
(-\d{3,4})?手机号码正则表达式
正则验证手机号,忽略前面的0,支持130-139,150-159。忽略前面0之后判断它是11位的。
cloeft的正则:
/^0*(13|15)\d{9}$/
^0*匹配掉开头任意数量的0。
由于手机号码是13任意数字9位,和15任意数字9位,所以可以用(13|15)\d{9}匹配。
测试代码如下:
function testReg(reg,str){
return reg.test(str);
}
var reg = /^0*(13|15)\d{9}$/;
var str = ’13889294444′;
var str2 = ’12889293333′;
var str3 = ’23445567′;
document.write(testReg(reg,str)+’<br />’);
document.write(testReg(reg,str2)+’<br />’);
document.write(testReg(reg,str3)+’<br />’);
使用正则表达式实现删除字符串中的空格:
来源:请问JS中有没有去掉空格的函数
代码以及测试代码如下:
<script type=”text/javascript”>
//删除字符串两侧的空白字符。
function trim(str){
return str.replace(/^\s+|\s+$/g,”);
}
//删除字符串左侧的空白字符。
function ltrim(str){
return str.replace(/^\s+/g,”);
}
//删除字符串右侧的空白字符。
function rtrim(str){
return str.replace(/\s+$/g,”);
}
//以下为测试代码
var trimTest = ” 123456789 “;//前后各有一个空格。
document.write(‘length:’+trimTest.length+’<br />’);//使用前
document.write(‘ltrim length:’+ltrim(trimTest).length+’<br />’);//使用ltrim后
document.write(‘rtrim length:’+rtrim(trimTest).length+’<br />’);//使用rtrim后
document.write(‘trim length:’+trim(trimTest).length+’<br />’);//使用trim后
</script>
测试的结果如下:
length:11
ltrim length:10
rtrim length:10
trim length:9
限制文本框只能输入数字和小数点等等
来源:文本框输入限制的问题????
只能输入数字和小数点
var reg = /^\d*\.?\d{0,2}$/开头有若干个数字,中间有0个或者一个小数点,结尾有0到2个数字。
只能输入小写的英文字母和小数点,和冒号,正反斜杠(:./\)
var reg = /[a-z\.\/\\:]+/;
a-z包括了小写的英文字母,\.是小数点,\/和\\分别是左右反斜线,最后是冒号。整个组成一个字符
集和代码任一均可,最后在加上+,1或者多个。
替换小数点前内容为指定内容
来源:求一正则表达式!
请问 怎么把这个字符串的小数点前面的字符替换为我自定义的字符串啊?
例如:infomarket.php?id=197 替换为 test.php?id=197
应该可以把第一个点“.”之前的所有单词字符替换为test就可以了。我写的正则如下:
<script type=”text/javascript”>
var str = “infomarket.php?id=197″;
var reg = /^\w*/ig;
//匹配字符串开头的任意个单词字符
str = str.replace(reg,’test’);
document.write(str);
</script>
原帖的有点复杂,没太看明白。
只匹配中文的正则表达式
来源:关于上传的时候,只能选择中文名称的图片(是否可以用TOASCII方法呢?)
前两天看的《JavaScript开发王》里恰好有中文的unicode范围,正则如下:
/[\u4E00-\u9FA5\uf900-\ufa2d]/
写了一个简单的测试,会把所有的中文替换成“哦”。
<script type=”text/javascript”>
var str = “有中文?and English.”;
var reg = /[\u4E00-\u9FA5\uf900-\ufa2d]/ig;
str = str.replace(reg,’哦’);
document.write(str);
</script>
返回字符串的中文字符个数
来源:有没返回中文字符字节的函数!
一般的字符长度对中文和英文都是不分别的 如JS里的length,那么如何返回字符串中中文字符的个数
呢?guoshuang老师在原帖中给出了解决方案,我又没看懂……
不过我自己也想到了一个办法:先去掉非中文字符,再返回length属性。函数以及测试代码如下:
<script type=”text/javascript”>
function cLength(str){
var reg = /[^\u4E00-\u9FA5\uf900-\ufa2d]/g;
//匹配非中文的正则表达式
var temp = str.replace(reg,”);
return temp.length;
}
var str = “中文123″;
document.write(str.length+’<br />’);
document.write(cLength(str));
</script>
结果:
5
2中文两个,数字三个,正确。
下面的测试也正确。
var str = “中文123tets@#!#%$#[][{}";
document.write(str.length+'<br />');
document.write(cLength(str));
正则表达式取得匹配IP地址前三段
来源:如何用正则取IP前3段
192.168.118.101,192.168.118.72, 192.168.118.1都替换成:192.168.118
只要匹配掉最后一段并且替换为空字符串就行了,正则如下:
/\.\d{1,3}$/
匹配结尾的.n,.nn或者.nnn。
测试代码如下:
function replaceReg(reg,str){
return str.replace(reg,'')
}
var reg = /\.\d{1,3}$/;
var str = '192.168.118.101';
var str2 = '192.168.118.72';
var str3 = '192.168.118.1';
document.write(replaceReg(reg,str)+'<br />');
document.write(replaceReg(reg,str2)+'<br />');
document.write(replaceReg(reg,str3)+'<br />');
相似的有,这个帖子里有一个验证IP地址的方法:求检验MAC地址的正则表达例子
匹配<ul>与<ul>之间的内容
来源:请教个正则的小问题吧
<ul>safsf<ul>safsf</ul><ul>safsf</ul></ul>
用正则可以得到 <ul>起到下个<ul> 之间的内容。
正则如下:
/<ul>[\s\S]+?<ul>/i
首先匹配两侧的ul标签,中间的[\s\S]+?可以匹配一个或者多个任意字符,一定要非贪婪,否则会匹
配<ul>safsf<ul>safsf</ul><ul>。
用正则表达式获得文件名
来源:C:\006.JPG
c:\images\tupian\006.jpg
可能是直接在盘符根目录下,也可能在好几层目录下,要求替换到只剩文件名。
xlez的正则如下:
/[^\\\/]*[\\\/]+/g
首先匹配非左右斜线字符0或多个,然后是左右斜线一个或者多个。形如“xxx/”或者“xxx\”或者“/”或
者“\”
函数以及测试代码:
<script type=”text/javascript”>
function getFileName(str){
var reg = /[^\\\/]*[\\\/]+/g;
//xxx\或者是xxx/
str = str.replace(reg,”);
return str;
}var str = “c:\\images\\tupian\\006.jpg”;
document.write(getFileName(str)+’<br />’);
var str2 = “c:/images/tupian/test2.jpg”;
document.write(getFileName(str2));
</script>
注意,\需要转义。
绝对路径变相对路径
来源:讨论一个正则
将<IMG height=”120″ width=”800″ src=”http://23.123.22.12/image/somepic.gif”>转换
为:<IMG height=”120″ width=”800″ src=”/image/somepic.gif”>。
其中网址可能改变,例如http://localhost等等。
cloudchen的正则:
/http:\/\/[^\/]+/
首先是http://,然后[^\/]+找过1个或者多个非/字符,因为遇到第一个/表示已经到目录了,停止匹
配。
测试代码如下:
<script type=”text/javascript”>
var str = ‘<IMG height=”120″ width=”800″ src=”http://23.123.22.12/image/
somepic.gif”>’;
var reg = /http:\/\/[^\/]+/;
str = str.replace(reg,”");
alert(str)
</script>
用户名正则
来源:求正则,急急呀!!
用于用户名注册,,用户名只 能用 中文、英文、数字、下划线、4-16个字符。
hansir和解决方案弄成正则:
/^[\u4E00-\u9FA5\uf900-\ufa2d\w]{4,16}$/
中文字符或者单词字符,4到16个。实现4到16结成到正则里的关键就是开始^和结束$,这就等于整
个字符串只能有这些匹配的内容,不能有多余的。
函数和测试代码如下:
<script type=”text/javascript”>
function isEmail(str){
var reg = /^[\u4E00-\u9FA5\uf900-\ufa2d\w]{4,16}$/;
return reg.test(str);
}
var str = ‘超级无敌用户名regExp’;
var str2 = ‘捣乱的@’;
var str3 = ‘太短’
var str4 = ‘太长longlonglonglonglonglonglonglong’
document.write(isEmail(str)+’<br />’);
document.write(isEmail(str2)+’<br />’);
document.write(isEmail(str3)+’<br />’);
document.write(isEmail(str4)+’<br />’);
</script>
匹配英文地址
来源:-求助- 正则问题规则如下:
包含 “点”, “字母”,”空格”,”逗号”,”数字”,但开头和结尾不能是除字母外任何字符。
[\.a-zA-Z\s,0-9]这个字符集就实现了字母,空格,逗号和数字。最终正则如下:
/^[a-zA-Z][\.a-zA-Z\s,0-9]*?[a-zA-Z]+$/
开头必须有字母,结束也必须是一个以上字母。测试代码如下:
<script type=”text/javascript”>
function testReg(reg,str){
return reg.test(str);
}
var reg = /^[a-zA-Z][\.a-zA-Z\s,0-9]*?[a-zA-Z]+$/;
var str = ‘No.8,ChangAn Street,BeiJing,China’;
var str2 = ’8.No,ChangAn Street,BeiJing,China’;
var str3 = ‘No.8,ChangAn Street,BeiJing,China88′;
document.write(testReg(reg,str)+’<br />’)
document.write(testReg(reg,str2)+’<br />’)
document.write(testReg(reg,str3)+’<br />’)
</script>
正则匹配价格
来源:为什么这个正则不起作用啊?急啊?
价格的格式应该如下:
开头数字若干位,可能有一个小数点,小数点后面可以有两位数字。hansir给出的对应正则如下:
/^(\d*\.\d{0,2}|\d+).*$/
hansir给出的测试代码如下:
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN”
“http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″ />
<title>无标题文档</title>
<script type=”text/javascript”>
function checkPrice(me){
if(!(/^(?:\d+|\d+\.\d{0,2})$/.test(me.value))){
me.value = me.value.replace(/^(\d*\.\d{0,2}|\d+).*$/,’$1′);
}
}
</script>
</head>
<body>
<input type=”text” onkeyup=”checkPrice(this);”/>
</body>
</html>
身份证号码的匹配
来源:关于正则的,大家帮帮忙,急,在线等
身份证号码可以是15位或者是18位,其中最后一位可以是X。其它全是数字,正则如下:
/^(\d{14}|\d{17})(\d|[xX])$/
开头是14位或者17位数字,结尾可以是数字或者是x或者是X。
测试代码如下:
<script type=”text/javascript”>
function testReg(reg,str){
return reg.test(str);
}var reg = /^(\d{14}|\d{17})(\d|[xX])$/;
var str = ’123456789012345′;//15位
var str2 = ’123456789012345678′;//18位
var str3 = ’12345678901234567X’;//最后一位是X
var str4 = ’1234′;//位数不对
document.write(testReg(reg,str)+’<br />’);
document.write(testReg(reg,str2)+’<br />’);
document.write(testReg(reg,str3)+’<br />’);
document.write(testReg(reg,str4)+’<br />’);
</script>
要求文本有指定行数
来源:[求助]求一句正则表达式的写法
匹配至少两行的字符串,每行都为非空字符。
只要匹配到[\n\r]就表示有换行了,再保证换行的两段都不是空字符就可以了。正则如下:
/\S+?[\n\r]\S+?/i
这个正则的应用应该是用在textarea里,如果是如下要求:可以支持所有字符,中间可带空格,可以
包括英文、数字、中文、标点
这样的话,只要针对空格再改一下就行了。(按照非空的要求,上面有不能匹配“字符+空格+换行+字
符”的字符串)。修改如下:
/\S+?\s*?[\n\r]\s*?\S+?/i
单词首字母大写
来源:求个正则,处理英文单词或词组的
每单词首字大写,其他小写。如blue idea转换为Blue Idea,BLUE IDEA也转换为Blue Idea
cloeft的正则:
/\b(\w)|\s(\w)/g
所谓“首字母”包括两种情况:第一种是边界(开头)的单词字符,一种是空格之后的新单词的第一个字
母。测试代码如下:
<script type=”text/javascript”>
function replaceReg(reg,str){
str = str.toLowerCase();
return str.replace(reg,function(m){return m.toUpperCase()})
}
var reg = /\b(\w)|\s(\w)/g;
var str = ‘blue idea’;
var str2 = ‘BLUE IDEA’;
var str3 = ‘Test \n str is no good!’;
var str4 = ‘final test’;
document.write(replaceReg(reg,str)+’<br />’);
document.write(replaceReg(reg,str2)+’<br />’);
document.write(replaceReg(reg,str3)+’<br />’);
document.write(replaceReg(reg,str4)+’<br />’);
</script>
正则验证日期格式
来源:YYYY-MM-DD的正则怎样写啊?
yyyy-mm-dd格式
正则如下:
/^\d{4}-\d{1,2}-\d{1,2}$/
4位数字,横线,1或者2位数字,再横线,最后又是1或者2位数字。测试代码如下:
<script type=”text/javascript”>
function testReg(reg,str){
return reg.test(str);
}
var reg = /^\d{4}-\d{1,2}-\d{1,2}$/;
var str = ’2008-8-8′;
var str2 = ’2008-08-08′;
var str3 = ’08-08-2008′;
var str4 = ’2008 08 08′;
document.write(testReg(reg,str)+’<br />’);
document.write(testReg(reg,str2)+’<br />’);
document.write(testReg(reg,str3)+’<br />’);
document.write(testReg(reg,str4)+’<br />’);
</script>
第二种格式:来源:求一正则表达式
yyyy-mm-dd
或
yyyy/mm/dd
用“或”简单地修改一下就行了。
/^\d{4}(-|\/)\d{1,2}(-|\/)\d{1,2}$/
去掉文件的后缀名
来源:求一个正则
www.abc.com/dc/fda.asp变为www.abc.com/dc/fda。
如果文件后缀已知的话这个问题就非常简单了,正则如下:
/\.asp$/
匹配最后的.asp而已,测试代码如下:
<script type=”text/javascript”>
function delAspExtension(str){
var reg = /\.asp$/;
return str.replace(reg,”);
}
var str = ‘www.abc.com/dc/fda.asp’;
document.write(delAspExtension(str)+’<br />’);
</script>
如果文件名未知的话就用这个正则:/\.\w+$/,测试代码如下:
<script type=”text/javascript”>
function delExtension(str){
var reg = /\.\w+$/;
return str.replace(reg,”);
}
var str = ‘example.com/dc/fda.asp’;
document.write(delExtension(str)+’<br />’);
var str2 = ‘test/regular/fda.do’;
document.write(delExtension(str2)+’<br />’);
var str3 = ‘example.com/dc/fda.strange_extension’;
document.write(delExtension(str3)+’<br />’);
</script>
验证邮箱的正则表达式
来源:找JAVASCRIPT写的表单检查代码!
fuchangxi的正则:/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/
开始必须是一个或者多个单词字符或者是-,加上@,然后又是一个或者多个单词字符或者是-。然后是
点“.”和单词字符和-的组合,可以有一个或者多个组合。
<script type=”text/javascript”>
function isEmail(str){
var reg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/;
return reg.test(str);
}
var str = ‘test@hotmail.com’;
document.write(isEmail(str)+’<br />’);
var str2 = ‘test@sima.vip.com’;
document.write(isEmail(str2)+’<br />’);
var str3 = ‘te-st@qq.com.cn’;
document.write(isEmail(str3)+’<br />’);
var str4 = ‘te_st@sima.vip.com’;
document.write(isEmail(str4)+’<br />’);
var str5 = ‘te.._st@sima.vip.com’;
document.write(isEmail(str5)+’<br />’);
</script>
我不太了解邮箱的具体规则。感觉这个正则比较简单,EMAIL校验 正则 讨论 求解里有比较详细的邮
箱正则讨论。
匹配源代码中的链接
来源:正则
能够匹配HTML代码中链接的正则。
原帖正则:/<a href=”.+?”>.+?<\/a>/g
感觉有点严格,首先要<a href=”.+?”>有,而且href属性可以是一个或者多个除换行外任意字符(非
贪婪)。后面是.+?<\/a>,一个或者多个除换行外任意字符(非贪婪),再加上结束标签。
有个问题,如果a的起始标签最后有空格,或者除了href还有其它属性的话,上面的正则就不能匹配这
个链接了。
例如:
<a href=”asdfs” >……多了个空格。
<a id=”xx” href=”asdfs”>……前面有属性。
……
重写正则:/<a\s(\s*\w*?=”.+?”)*(\s*href=”.+?”)(\s*\w*?=”.+?”)*\s*>[\s\S]*?<\/a>/
思路如下:首先要有<a和一个空格。/<a\s/
第一个(\s*\w*?=”.+?”)*
可以匹配一个属性,属性前面可能有或者没有多余的空格,用\s*匹配;属性名肯定是单词字符,
用\w*?匹配;=”.+?”就是匹配属性值了非换行字符若干个;整个括号外面加个*表示可能有任意多个
属性。
(\s*href=”.+?”)
匹配href,它也是一个属性,所以只要把上面子正则表达式中的\w修改为href=就行了。
(\s*\w*?=”.+?”)*重复第一个子正则表达式,再次接受任意个属性。
\s*>,属性最后再加上若干个空格和>。
[\s\S]*?,链接的文字,可能有任何字符组成,若干个,非贪婪。
<\/a>最后是结束标签。
补充:属性名和=之间,以及=和属性值之间也可能有空格。所以要再加上几个\s*。
最后的实例代码如下:
<script type=”text/javascript”>
function findLinks(str){
var reg =
/<a\s(\s*\w*?\s*=\s*”.+?”)*(\s*href\s*=\s*”.+?”)(\s*\w*?\s*=\s*”.+?”)
*\s*>[\s\S]*?<\/a>/g;
var arr = str.match(reg);
for(var i=0;i<arr.length;i++){//alert(arr[i]);
document.write(‘link:’+arr[i]+’<br />’);
}
}
var str = ‘<p>测试链接:<a id = “test” href=”http://bbs.blueidea.com” title=”无敌”>经典
论坛
</a></p><a href = “http://www.blueidea.com/” >蓝色理想</a>’;
var arr = findLinks(str);
</script>
会把所有的链接在页面直接显示出来。注意,
本帖遗留问题:如何执行从右到左的匹配。貌似 JS 或者VBS 没有提供这个功能 2、 JS 或
者VBS 不支持 后行断言。。用什么方法实现这个功能。
匹配链接的文字
来源:求一正则
代码:<a href=#>这里要保存</a>,只保存链接的文本内容,标签信息删掉。
前面写过一个匹配链接的正则:
/<a\s(\s*\w*?=”.+?”)*(\s*href=”.+?”)(\s*\w*?=”.+?”)*\s*>[\s\S]*?<\/a>/
不过我们需要捕获的是文字内容,所以需要做一定的修改。第一步就是在所有的括号内都加上?:表示不
捕获。第二步就是再多加一个括号放在[\s\S]*?两侧,这样就可以捕获到链接的文字内容了。最后正
则如下:
/<a\s(?:\s*\w*?\s*=\s*”.+?”)*(?:\s*href\s*=\s*”.+?”)(?:\s*\w*?\s*=\s*”.+?”)*\s*>([\s\S]*?)<\/
a>/
测试代码如下:
<script type=”text/javascript”>
function anchorText(str){
var reg =
/<a\s(?:\s*\w*?\s*=\s*”.+?”)*(?:\s*href\s*=\s*”.+?”)(?:\s*\w*?\s*=\s*”.+?”)*\s*>
([\s\S]*?)<\/a>/;
str = str.replace(reg,’$1′);
return str;
}
var str = ‘<a id = “test” href=”http://bbs.blueidea.com” title=”无敌”>经典论坛</a>’;
document.write(anchorText(str));
</script>
正则判断标签是否闭合
来源:求助 超难!正则表达式如何判断一个标签是否闭合
例如:<img xxx=”xxx” 就是没有闭合的标签;
<p>p的内容,同样也是没闭合的标签。
从简单的正则开始,先匹配起始标签
/<[a-z]+/i
再加上若干属性:
/<[a-z]+(\s*\w*?\s*=\s*”.+?”)*/i
下面就到关键点了,标签的闭合。标签可能有两种方式闭合,<img xxx=”xxx” />
或者是<p>xxx </p>。
(\s*\/>)
匹配img类的结束,即/>。
(\s*?>[\s\S]*?<\/\1>)
匹配\p类标签的结束标签。>是其实标签末尾,之后是标签内容若干个任意字符,最后的<\/\1>就是
结束标签了。
加上一个或就可以解决了,最后的完整正则表达式:
整个正则:/<([a-z]+)(\s*\w*?\s*=\s*”.+?”)*(\s*?>[\s\S]*?<\/\1>|\s*\/>)/i拿这个正则,只要匹配到了就表示闭合,没匹配到则没有闭合。不过没有考虑相同标签嵌套的问题,例
如
<div>aaaaaa<div>test</div>
也被判断为合格,可以通过把最后的匹配p类结束标签写成子正则表达式,并且更改为非贪心,然后在
匹配结果中检查是否成对。正则如下:
/<([a-z]+)(\s*\w*?\s*=\s*”.+?”)*(\s*?>[\s\S]*?(<\/\1>)+|\s*\/>)/i
用正则获得指定标签的内容
来源:求一正则
有如下代码:
<channel>
<title>蓝色理想</title>
</channel>
<item>
<title>界面设计测试规范</title>
</item>
<item>
<title>《古典写实美女》漫画教程</title>
</item>
<item>
<title>安远――消失的光年</title>
</item>
<item>
<title>asp.net 2.0多语言网站解决方案</title>
</item>
要求匹配item里的title而不匹配channel里的title。
基本正则:
/<title>[\s\S]*?<\/title>/gi
首先是title标签,内容为任意字符若干个,然后是title结束标签。这个正则已经能匹配到所有的title标
签。
首先,我简单地修改了一下原正则:
/<title>[^<>]*?<\/title>/gi,
因为title里面不应该再嵌有其它标签,这个正则同样是匹配所有标题的内容,最后再加上不去匹
配channel中的title。整个正则如下:
/<title>[^<>]*?<\/title>(?!\s*<\/channel>)/gi
(?!\s*<\/channel>)表示要匹配字符串的后面不能跟着若干个空格和一个channel的结束标签。
原帖里有很方便的测试工具,这里就不给测试代码了。
正则判断是否为数字与字母的混合
来源:关于正则
不能小于12位,且必须为字母和数字的混合。
验证字符串包含数字简单,验证字符串包含字母也简单,验证字符串不包含其它字符也简单,可以用这
三个正则分别检查一次字符串,逻辑运算出最终结果。
但是怎么能把这些功能写进一个正则表达式里呢?这个问题真有点伤脑筋。
下面是lexrus的正则:
/^([a-z]+(?=[0-9])|[0-9]+(?=[a-z]))[a-z0-9]+$/ig
思路非常的清晰啊:
[a-z]+(?=[0-9])
字母开头,后面必须紧跟着数字。
[0-9]+(?=[a-z]
数字开头,后面必须紧跟着字母。
[a-z0-9]+后面的字符只要是数字或者字母就可以了。经过测试,发现不好使,123dd会被识别为不合
法,dd123则为合法,可见“数字开头,紧跟字母”的正则没有起作用。测试代码如下:
<script type=”text/javascript”>
function istrue(str){
var reg=/^([a-z]+(?=[0-9])|[0-9]+(?=[a-z]))[a-z0-9]+$/ig;
return reg.test(str);
}
var str = ‘AaBc’;
var str2 = ‘aaa123′;
var str3 = ’123dd’;
var str4 = ’1230923403982′;
document.write(istrue(str)+’<br />’);
document.write(istrue(str2)+’<br />’);
document.write(istrue(str3)+’<br />’);
document.write(istrue(str4)+’<br />’);
</script>
结果为:
false,true,false,false
结果中的第三个,将’123dd’判断为非法是错误的。刚开始以为是g的问题,去掉了还是不好使。应该
是浏览器bug,我认为lexrus的正则是正确的,可能是浏览器无法处理或”|”的两边都包含正向预
查(?=)。
修改之后的正则如下:
/^(([a-z]+[0-9]+)|([0-9]+[a-z]+))[a-z0-9]*$/i
意思和上面差不多,但是没有使用正向预查,测试代码如下:
<script type=”text/javascript”>
function istrue(str){
var reg=/^(([a-z]+[0-9]+)|([0-9]+[a-z]+))[a-z0-9]*$/i;
return reg.test(str);
}
var str = ‘AaBc’;
var str2 = ‘aaa123′;
var str3 = ’123dd’;
var str4 = ’1230923403982′;
document.write(istrue(str)+’<br />’);
document.write(istrue(str2)+’<br />’);
document.write(istrue(str3)+’<br />’);
document.write(istrue(str4)+’<br />’);
</script>
结果为
false,true,true,false
正确。
空格与英文同时存在
来源:正则问题请指教啊!
匹配英文以及空格,要求必须既有英文字母又有空格。
这个思路和上面的差不多,只要把数字改成空格就可以了。正则如下:
/^(([a-z]+\s+)|(\s+[a-z]+))[a-z\s]*$/i
英文开头加空格,或者是空格开头加英文,后面可以是英文或者空格。测试代码如下:
<script type=”text/javascript”>
function istrue(str){
var reg=/^(([a-z]+\s+)|(\s+[a-z]+))[a-z\s]*$/i;
return reg.test(str);
}
var str = ‘asdf’;
var str2 = ‘sadf sdf’;var str3 = ‘asdf ‘;
document.write(istrue(str)+’<br />’);
document.write(istrue(str2)+’<br />’);
document.write(istrue(str3)+’<br />’);
</script>
利用这个思路也可以实现英文空格英文,英文单词多于两个的匹配。同样,也可以把英文字母换成单词
字符\w。
显示或者保存正则表达式匹配的部分内容
有如下电话号码:
13588888333
13658447322
13558885354
13587774654
13854554786
要求,要求只匹配135开头的电话,但是匹配结果只保留135后面的数字。
由于JavaScript里的正则不支持(?=xx)xxx的模式,只支持xxx(?=xx)的模式。所以只能将135后面
的内容作为一个子正则表达式匹配的内容,然后再在后面引用。
Carl给出的函数如下:
function f(phoneNumber) {
var pattern = /^(135)(\d{8})$/;
if(pattern.test(phoneNumber))
return phoneNumber.replace(pattern,”$2″);
else
return “不是135打头的手机号码!”;
}
/^(135)(\d{8})$/
正则中,135作为开头表示第一个子正则表达式,第二个括号内的子正则表达式则匹配后面的8个数
字,然后在replace中使用$2就可以引用这个子正则表达式匹配的内容了。测试代码如下:
<script type=”text/javascript”>
function f(phoneNumber) {
var pattern = /^(135)(\d{8})$/;
if(pattern.test(phoneNumber))
return phoneNumber.replace(pattern,”$2″);
else
return “不是135打头的手机号码!”;
}
var arr = new Array(
“13588888333″,
“13658447322″,
“13558885354″,
“13587774654″,
“13854554786″
);
for(var i = 0; i < arr.length; i++)
document.write(f(arr[i])+’<br />’);
</script>
正则表达式替换变量
来源:求教正则
有一个数组:
var _A = ['A','B','C','D'];
有一个有“变量”的字符串。var _B = ‘<ul><li>$0$< / li><li>$1$< / li><li>$2$< / li><li>$3$< / li></ul>’;
说是变量,其实只是字符串中的特殊字符,例如$0$,就称这个为伪变量吧。
最后的要求就是使用正则获得下面这样一个字符串:
_C = ‘<ul><li>A< / li><li>B< / li><li>C< / li><li>D< / li></ul>’;
IamUE给出了代码:
<script type=”text/javascript”>
var _A = ['A','B','C','D'];
var _B = ‘<ul><li>$0$< / li><li>$1$< / li><li>$2$< / li><li>$3$< / li></ul>’;
var reg=/\$\d+\$/ig;
C=_B.replace(reg,function($1){
var indexnum=$1.replace(/\$/ig,”");
if (indexnum<_A.length)
{return _A[indexnum];}
else{return “”}
});
alert(C);
</script>
代码分析:看到代码之后感觉有点晕,首先,正则reg中没有任何的括号,应该是没有捕获内容的,那
么后面怎么又使用$1了引用了呢?通过alert测试,发现它是整个正则匹配的内容,而且不一定要写
作$1,可以写为$0,甚至是写为x都没关系,它总是整个匹配。
第一次,$1匹配到_B中的“$0$”,匿名函数中将它的$去掉,变成了0,检查是否越界之后,用这
个0作为下标去访问数组_A。
由于正则reg定义了g属性,所以会继续替换$1$、$2$等等。步骤都和上面一样。
正则替换指定属性中的文本
来源:怎样用正则来查找替换?
有如下代码:
<td align=”center”><img src=”../photo/ccg/thumbnails/
O’Malley’s West_jpg.gif” border=”0″
onClick=”MM_openBrWindow(‘../photo/ccg/pages/O’Malley’s
West_jpg.htm’,'BE’,'width=386,height=306′)”><br>
O’Malley’s West</td>
要求将所有onclick属性中的’替换成\’,也就是将单引号转义。
首先,需要匹配onclick属性:
/onclick\s*=\s*”.+?”/ig
然后再将所有的’都替换成\’就可以了。整个测试的代码如下:
<script type=”text/javascript”>
<!–
function $(id) {
return document.getElementById(id);
}
function replace() {
$(“txtDes”).value = $(“txtSrc”).value.replace(/onclick\s*=\s*”.+?”/ig, function (m) {
return m.replace(/\’/g, “\\’”);
});
}
//–>
</script>
<textarea id=”txtSrc” rows=”15″ cols=”80″>
<td align=”center”><img src=”../photo/ccg/thumbnails/O’Malley’s West_jpg.gif”
border=”0″ onClick=”MM_openBrWindow(‘../photo/ccg/pages/O’Malley’s
West_jpg.htm’,'BE’,'width=386,height=306′)”><br>
O’Malley’s West</td><td align=”center”><img src=”../photo/lag/thumbnails/Coach’s Bar & Grill_jpg.gif”
border=”0″ onClick=”MM_openBrWindow(‘../photo/lag/pages/Coach’s Bar &
Grill_jpg.htm’,'BE’,'width=386,height=306′)”><br>
Coach’s Bar & Grill</td>
<td align=”center”><img src=”../photo/pnx/thumbnails/Betty’s Burger (Hamburger
Mary’s)_jpg.gif” border=”0″ onClick=”MM_openBrWindow(‘../photo/pnx/pages/Betty’s
Burger (Hamburger Mary’s)_jpg.htm’,'BE’,'width=386,height=306′)”><br>
Betty’s Burger (Hamburger Mary’s)</td>
</textarea>
<br/>
<input type=”button” onclick=”replace();” value=” replace ” />
<br/>
<textarea id=”txtDes” rows=”15″ cols=”80″>
</textarea>
将阿拉伯数字替换为中文大写形式
来源:正则问题
将123替换成壹贰叁。
只要匹配一个数字就可以了,测试代码如下(如果显示为乱码就调整一下浏览器的字符编码):
function replaceReg(reg,str){
return str.replace(reg,function(m){return arr[m];})
}
arr=new Array(“零”,”壹”,”贰”,”叁”,”肆”,”伍”,”陆”,”柒”,”捌”,”玖”);
var reg = /\d/g;
var str = ’13889294444′;
var str2 = ’12889293333′;
var str3 = ’23445567′;
document.write(replaceReg(reg,str)+’<br />’);
document.write(replaceReg(reg,str2)+’<br />’);
document.write(replaceReg(reg,str3)+’<br />’);
替换文本中的URL为链接
来源:求一链接替换正则
将一个用户输入的一段文字中的url替换成可以点击的link地址。例如:http://www.blueidea.com可
以替换成 [url]http://www.cctv.com[/url]
或<a href=”http://www.cctv.com”>http://www. blueidea.com</a>.
这个正则的关键就在于匹配链接,匹配之后,在两边加上a标签和属性不是问题。
/http:\/\/[\w-]*(\.[\w-]*)+/ig
首先匹配http://。
[\w-]*是可能的www和bbs等。
\.[\w-]*匹配.xxx形式,至少有一个。
测试代码如下:
<script type=”text/javascript”>
function replaceReg(reg,str){
return str.replace(reg,function(m){return ‘<a href=”‘+m+’”>’+m+’</a>’;})
}
var reg = /http:\/\/[\w-]*(\.[\w-]*)+/ig;
var str = ‘将一个用户输入的一段文字中的url替换成可以点击的link地址。测试一
下:http://www.blueidea.com紧接着中文,还有http://bbs.blueidea.com is very
good!http://blueidea.com!最后在看看带.cn的:http://www.sina.com.cn呵呵。’;
document.write(replaceReg(reg,str)+’<br />’);
</script>从HTML代码段删除指定标签极其内容
来源:关于正则的问题
在一段代码中去除<script …… /script>, <head>…</head>,<%…..%>等代码块
隆的正则:
/<(script|meta|%)[\s\S]*?\/(script|meta|%)>/
试了一下,匹配如下文本正常:
<script type=”text/javascript”>
我是要被删除的脚本
</script>
哎。就剩下我了。
但是,如果使用类似的正则:
/<(script|head|%)[\s\S]*?\/(script|head|%)>/ig
匹配有嵌套的标签:
<head>
<script type=”text/javascript”>
我是要被删除的脚本
</script>
</head>
哎。就剩下我了。
实际匹配的内容是:
<head>
<script type=”text/javascript”>
我是要被删除的脚本
</script>
这是因为[\s\S]*?里的非贪婪造成的。可以使用JavaScript正则里的反向引用来解决这个问题,如果
起始标签匹配了head,那么结束标签也必须是head。最后的正则如下:
/<(script|head|%)[\s\S]*?\/\1>/ig
用正则给文本分段
来源:怎样用正则分段落
源代码:[title]标题一[/title]内容一232323sdfga [title]标题二[/title]内容二2232323 [title]标题
三[/title]内容三2232323
要把文本分段成如下格式:
一、[title]标题一[/title]内容一232323sdfga
二、[title]标题二[/title]内容二2232323
三、[title]标题三[/title]内容三2232323
只要用正则匹配title就可以了,所以正则比较简单
/\[title\]/ig
至于开始的的汉字序号,只要一个数组就解决了,最终代码如下:
<script type=”text/javascript”>
function replaceReg(reg,str){
var mark =0;
return str.replace(reg,function(m){mark++;return ‘<br />’+arr[mark]+’、’+m;})
}
var arr = ["零","壹","贰","叁","肆","伍","陆","柒","捌","玖"];
var reg = /\[title\]/ig;
var str = ‘[title]标题一[/title]内容一232323sdfga [title]标题二[/title]内容二2232323 [title]标
题三[/title]内容三2232323′;
document.write(replaceReg(reg,str)+’<br />’);
</script>转换源代码中的标签
来源:一个正则上的问题
将代码中的HTML标签img转换为[img]url[/img]。
/<img(?:\s*\w*?\s*=\s*”.+?”)*?\s*src\s*=\s*”(.+?)”(?:\s*\w*?\s*=\s*”.+?”)*\s*>/ig
这段正则和匹配链接标签的正则基本一样,修改如下,标签名img,没有结束标签而是>结束。
测试代码如下:
<script type=”text/javascript”>
function replaceReg(reg,str){
return str.replace(reg,’[img]$1[/img]‘)
}
var reg =
/<img(?:\s*\w*?\s*=\s*”.+?”)*?\s*src\s*=\s*”(.+?)”(?:\s*\w*?\s*=\s*”.+?”)*\s*>/
ig;
var str = ‘我就是传说中的图片了<img src=”URL”>哎。’;
document.write(replaceReg(reg,str)+’<br />’);
</script>
第二个是替换object代码嵌入的flash代码替换为[swf]url[/swf]。
针对原文的正则如下:
/<object[\s\S]*?src=([\s\S]+?)(?=\s)[\s\S]*<\/object>/i
如果是所有的属性都有双引号的话正则也需要修改。
测试如下:
<script type=”text/javascript”>
function replaceReg(reg,str){
return str.replace(reg,’[swf]$1[/swf]‘)
}
var reg = /<object[\s\S]*?src=([\s\S]+?)(?=\s)[\s\S]*<\/object>/i;
var str = ‘<object classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000
codebase=http://download.macromedia.com/pub/shockwave/cabs/flash/
swflash.cab#version=5,0,0,0 width=255 height=250><param name=movie
value=url><param name=quality value=high><embed src=url quality=high
pluginspage=http://www.macromedia.com/shockwave/download/
index.cgi?P1_Prod_Version=ShockwaveFlash type=application/x-shockwave-flash
width=255 height=250></embed></object>’;
document.write(replaceReg(reg,str)+’<br />’);
</script>
给属性添加双引号
来源:请教正则表达式高手
给HTML标签中的属性添加双引号。
<a href=xxx>改为:<a href=”xxx”>
LeXRus的第一个正则如下:
/(?!\<\w+)(\s+\w+)\=([^>\"\s]+)/ig
第一个括号没看明白,JS应该是不支持。所以我擅自给删掉了,剩下的正则如下:
/(\s+\w+)\=([^>\"\s]+)/ig
第一个括号里的\s+\w+匹配的是属性名。
然后是=,不用转义。
第二个括号里的[^>\"\s]+匹配属性值。不匹配>”和空格。这里的引号不用转义。在意思不改变的情
况下,稍微改了改,正则如下:
/(\s+\w+)=([^>"\s]+)/ig
需要注意的是这个正则不匹配=两边有空格的属性,例如href = xxx。相匹配的话就改成:
/(\s+\w+)\s*=\s*([^>"\s]+)/ig
代码:
str=str.replace(/(?!\<\w+)(\s+\w+)\=([^>\"\s]+)/ig,’$1=”$2″‘);其中’$1=”$2”’就实现了给属性值添加上双引号。不过ncs指出了这个正则替换的几个问题,一是上面
的空格问题,二是如果非标签内部有等号,且前面又恰巧有空白字符的话,它将会被误识别为属性,例
如:
<a href=xxx target=yyy title = asdfasf> test=sd
里面的test=sd也会被匹配。三是如果属性原来使用了单引号,会被再包上一层双引号……
来看看LeXRus前辈的新正则替换方法:
str=str.replace(/(?!<\w+)(\s+\w+)\s*=\s*([^>\"\s]+)(?=[^>]*>)/
ig,’$1=”$2″‘).replace(/\”\’([^\'\"]+)\’\”/ig,’\”$1\”‘);
先来看第一个正则:
/ (\s+\w+)\s*=\s*([^>"\s]+)(?=[^>]*>)/ig
结尾新添的(?=[^>]*>)意在解决普通文本中有等号被误识别为属性的问题:
<a href=xxx target=yyy title = asdfasf> test=sd
就没问题了,但是
<a href=xxx target=yyy title = asdfasf> test=sd<tag>又一个标签</tag>
中的test=sd<tag>又会被识别为属性。
我觉得改成下面的正则就没问题了:
/(\s+\w+)\s*=\s*([^<>"\s]+)(?=[^<>]*>)/ig
分别在第二个括号的字符集合和最后的反向预查的字符集合中添加了一个<。
下面再来分析第二个正则,
/\”\’([^\'\"]+)\’\”/ig
这个正则用于匹配双引号,单引号多层嵌套的情况,同样,不用转义,修改正则如下:
/”‘([^'"]*)’”/ig
这样基本任务就完成了。测试代码如下:
<script>
function rp(str,trg){
var reg1 = /(\s+\w+)\s*=\s*([^<>"\s]+)(?=[^<>]*>)/ig
var reg2 = /”‘([^'"]*)’”/ig;
str=str.replace(reg1,’$1=”$2″‘).replace(reg2,’\”$1\”‘);
trg.value=str;
}
</script>
<textarea id=”sou” style=”width:100%”>
<a href = xxx name=aaa target=_blank title=’asdfasf’ onclick=alert(‘blueidea’)>
asfd=asfd
</textarea>
<input type=”button” onclick=”rp(sou.value,sou)” value=”replace”/>
原帖里LeXRus又提出了新问题:
hint=i am lexrus
这样的属性会有问题,不过我感觉不加引号的话,属性值里就不可能有空格,否则会被识别为多个属性
了。不过看到最后ncs的回帖我就哭了:
onclick=if(document.forms.length>0)
这样的属性怎么办?大于号会被识别为标签结束……还是分离行为与文档吧。补充一下,其实修补一下
正则也可以解决,只要改成如下正则即可:
/(\s+\w+)\s*=\s*([^"\s]+)(?=[^<>]*>)/ig
就是去掉第二个括号内字符集合里的<>。最后这个问题也解决。
给table加上tbody
来源:通过正则表达式快速在后加上
有若干table,但是没有tbody。现在需要用正则批量加上。
匹配table结束标签</table>比较简单,在前面加上一个</tbody>就行了。
但是,匹配table的起始标签有点难度,因为可能有属性。不过之前匹配过链接了,这个也大同小异。
实例table代码如下:
<table width=”100%” border=”0″ cellpadding=”2″ cellspacing=”3″>
<table width=”100%”>
正则:/<table\s(\s*\w*?\s*=\s*”.+?”)*?\s*?>/g
匹配一个<table,在匹配若干个属性,最后只要再找到>就代表标签结束。
之后再replace一下,加上<tbody>就可以了。
去掉标签的所有属性
来源:正则表达式(DREAMWEAVER8)
<td style=”width: 23px; height: 26px;” align=”left”>***</td>
变成没有任何属性的
<td>***</td>
思路:非捕获匹配属性,捕获匹配标签,使用捕获结果替换掉字符串。正则如下:
/(<td)\s(?:\s*\w*?\s*=\s*”.+?”)*?\s*?(>)/
首先,td匹配掉了标签,后面可以用$1引用,后面的若干属性被(?:)匹配掉,而最后匹配的>则可以在
后面用$2引用。
示意代码:
str = str.replace(reg,’$1$2’);
正则替换特定单词
来源:正则表达式,拒绝几个单词的输入该怎样表达?
要求禁止输入某几个单词,如果拒绝red,yellow,white。这个帖子到时不难,但是让我弄清楚了好几
个概念。
第一个,小心字符集合里的“或”
/[^red|yellow|white]/
这个正则里的所有或都没有意义,等同于:
/[^redyellowwhite]/
意思就是不能含有以下列出的所有字母。
正解:
/red|yellow|white/
第二个概念:
只要整个正则匹配成功,无论子正则表达式是否匹配成功,括号都会捕捉。例如
/(red)|(yellow)|(white)/
会捕捉到三个结果,尽管实际上最多只可能有一个括号匹配成功。但是只要有一个匹配到了,两外两个
也会记录空串。
指定文字高亮显示
来源:如何用正则把网页中的指定的字高亮显示
请教正则表达式:如何替换搜索结果中的关键字为高亮显示?
不劳而获一次,这个子虚乌有前辈已经给出了非常好的解决方案:我直接把代码贴出来了:
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN”
“http://www.w3.org/TR/2000/REC-xhtml1-20000126/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″ />
<META name=”Author” content=”Sheneyan” />
<script type=”text/javascript”>
function encode(s){
return s.replace(/&/g,”&”).replace(/</g,”<”).replace(/>/g,”>”).replace(/
([\\\.\*\[\]\(\)\$\^])/g,”\\$1″);
}
function decode(s){
return s.replace(/\\([\\\.\*\[\]\(\)\$\^])/g,”$1″).replace(/>/g,”>”).replace(/</
g,”<”).replace(/&/g,”&”);}
function highlight(s){
if (s.length==0){
alert(‘搜索关键词未填写!’);
return false;
}
s=encode(s);
var obj=document.getElementsByTagName(“body”)[0];
var t=obj.innerHTML.replace(/<span\s+class=.?highlight.?>([^<>]*)<\/span>/
gi,”$1″);
obj.innerHTML=t;
var cnt=loopSearch(s,obj);
t=obj.innerHTML
var r=/{searchHL}(({(?!\/searchHL})|[^{])*){\/searchHL}/g
t=t.replace(r,”<span class=’highlight’>$1</span>”);
obj.innerHTML=t;
alert(“搜索到关键词”+cnt+”处”)
}
function loopSearch(s,obj){
var cnt=0;
if (obj.nodeType==3){
cnt=replace(s,obj);
return cnt;
}
for (var i=0,c;c=obj.childNodes[i];i++){
if (!c.className||c.className!=”highlight”)
cnt+=loopSearch(s,c);
}
return cnt;
}
function replace(s,dest){
var r=new RegExp(s,”g”);
var tm=null;
var t=dest.nodeValue;
var cnt=0;
if (tm=t.match(r)){
cnt=tm.length;
t=t.replace(r,”{searchHL}”+decode(s)+”{/searchHL}”)
dest.nodeValue=t;
}
return cnt;
}
</script>
<style type=”text/css”>
.highlight{background:green;font-weight:bold;color:white;}
</style>
</head>
<body>
<form onsubmit=”highlight(this.s.value);return false;”>
<p><input name=”s” id=”s” title=”搜索内容:”/><input type=”submit” value=”搜
索”/></p>
</form>
<div id=”content”>
测试高亮的代码。很长很长的代码……………………
</div>
</body>
</html>删除标签
来源:如何使用正则表达式去除大部分HTML标记?
删除除了<img>、<br>、<p>之外所有的标签。子虚乌有给出代码中关键的一句:
o.innerHTML.replace(/(<\/?(?!br|p|img)[^>\/]*)\/?>/gi,”);
刚开始没反应过来,后来才想起来,这个正则不用区分起始和结束标签。
<\/?(?!br|p|img)
匹配除了保护标签外标签的起始标签或者是结束标签的一部分。
[^>\/]*
匹配到>或者/就结束。
\/?>
起始标签或者结束标签的结尾。
错误贴
熟悉正则的帮忙看看,一个小问题:反斜线灾难。
正则表达式通过变量传递后,\T转义字符的奇怪表现。:同上。
太难贴
我从来没用过UBB,这个关于UBB的帖子,我觉得比较难,就没有总结:关于表格的正则表达式讨论
(已实现,特别感谢LEXRUS)。
JSON我也不太明白,这个贴还没看,以后学了JSON再说。正则替换JSON数据问题。
还有一个挺难的帖子,正则的难题,感觉不应该用正则。
正则表达式做打字练习游戏:有什么特别好的办法(正则表达式问题)。里面有位高手做出来了,不过
是只在IE下有效。
匹配数字的“正则”
来源:[求助]匹配数字的正则式
匹配数字字符挺简单,但是匹配正数,负数之类的还真挺麻烦。不过子虚乌有前辈的一句话到是非常经
典:“不要一想到验证就想去用正则”。
是啊,不会正则的时候使劲躲,看了两天正则恨不得JavaScript编程“正则Script”。
类似的:
请问这个问题是不是必须要用正则表达式才能结局啊解决啊?
哪位高手知道怎么用正则替换图片名称吗?
复杂正则求助。。。。。。
正则资源
主题:JS正则表达式详解[收藏]
发个正则测试工具
PHP 字符串处理
PHP 的字符串处理功能非常强大,主要包括:
字符串输出
echo():输出一个或多个字符串
print():输出一个字符串
printf():输出格式化字符串
字符串去除
trim():去除字符串 首尾 空白等特殊符号或指定字符序列
ltrim():去除字符串 首 空白等特殊符号或指定字符序列
rtrim():去除字符串 尾 空白等特殊符号或指定字符序列
chop():同 rtrim()
字符串连接
implode():使用字符将数组的内容组合成一个字符串
join():同 implode()
字符串分割
explode():使用一个字符串分割另一个字符串
str_split():将字符串分割到数组中
字符串获取
substr():从字符串中获取其中的一部分
strstr():查找字符串在另一个字符串中第一次出现的位置,并返回从该位置到字符串结尾的所有字符
subchr():同 strstr()
strrchr():查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符
字符串替换
substr_replace():把字符串的一部分替换为另一个字符串
str_replace():使用一个字符串替换字符串中的另一些字符
字符串计算
strlen():取得字符串的长度
strpos():定位字符串第一次出现的位置
strrpos():定位字符串最后一次出现的位置
字符串 XHTML 格式化显示
nl2br():将换行符 n 转换成 XHTML 换行符 <br />
htmlspecialchars():把一些特殊字符转换为 HTML 实体
htmlspecialchars_decode():把一些 HTML 实体转换为特殊字符,htmlspecialchars() 的反函数
字符串存储(转义)
addslashes():对特殊字符加上转义字符。
stripslashes():addslashes() 的反函数。
谷歌在一年前推出google App Engine。我们可以通过Quercus这一方案来运行PHP。不幸的是Google App Engine上,php仍然是最希望被Google App Engine支持的。 Quercus可以说是100%的在Java上执行PHP语言的工具(需要的JDK 1。
谷歌在一年前推出Google App Engine。这个免费的应用程序托管引擎可以为你分配500 MB的持久存储和足够的CPU以及一个能支持每月约500万页面浏览的带宽。另外,如果你想得到更多支持,可以查看增值计划。
Google App Engine将支持Java继续向前发展。不幸的是Google App Engine上,PHP仍然是最希望被Google App Engine支持的。因此直到谷歌宣布其官方发布对PHP支持之前,我们可以通过Quercus这一方案来运行PHP。 Quercus可以说是100%的在Java上执行PHP语言的工具(需要的JDK 1.5 )。由于Google App Engine现在支持Java,这意味着我们可以通过Quercus来运行PHP脚本。
因此,在你使用的Google App Engine和运行PHP前需要
1)注册一个免费帐户。
2)下载此文件到您的计算机。
3)以您已经注册的应用程序的名称来修改XML文件中的war\WEB-INF\appengine-web.xml。
4)最后上传您的申请。我下载了Google App Engine SDK for Java,并使用下面的命令使其在Windows上运行。
Google launched their Google App Engine (GAE) a year ago. The free hosting in App Engine is allocated 500 MB of persistent storage and enough CPU and bandwidth for about 5 million page views a month. Also, if you really want more you can seepricing plans.
GAE will support Java going forward. Unfortunately PHP support on the App Engineis still left as the top item in the wishlist. So until Google announces their official PHP support we have a workaround to run PHP using Quercus. Quercus is basically a 100% Java implementation of the PHP language (requires JDK 1.5). Since the App Engine now supports Java this means we can use Quercus to run PHP scripts on the App Engine.
So all you need to use the GAE and run PHP
1) Register a free account.
2) Download this file to your computer.
3) Edit application XML tag in the file war\WEB-INF\appengine-web.xml to the name of the application you have registered.
4) Finally upload your application. I downloaded Google App Engine SDK for Javaand use the following command in windows.
appcfg.cmd update C:\projects\phpwithjava\war
To see this in action just visit:
http://phpwithjava.appspot.com/webdigi.phpand http://phpwithjava.appspot.com/info.php
NOTE: phpwithjava is my app name with GAE. Image by Aral Balkan.
搜索在线摄像头监视站点 在google中输入“inurl:”ViewerFrame?Mode=””或者“inurl:”MultiCameraFrame?Mode=””、“inurl:”view/index.shtml””(输入时不带外面的双引号,在英文状态下输入)。
1.搜索在线摄像头监视站点
在Google中输入“inurl:”ViewerFrame?Mode=””或者“inurl:”MultiCameraFrame?Mode=””、“inurl:”view/index.shtml””(输入时不带外面的双引号,在英文状态下输入),你会获得无数个未经加密的网络摄像机监视到的画面。无聊的时候玩玩,可以满足一下我们的好奇心。此外,打开这个站点:www.opentopia.com/hiddencam.php,在“from”中选择“China”,你还可以看到国内的某处网络摄像机画面。
2.让Google搜索结果在新窗口中打开
默认情况下Google的搜索结果跟百度等搜索引擎不一样,它是直接在当前网页中打开搜索结果,这对我们的使用会感到不方便,其实我们可以通过设置来达到目的。打开Google后,选择“使用偏好”链接,在打开页面的“结果视窗”中勾选“开启新视窗以显示查询结果。”一项,单击“存储偏好设置”按钮即可
3.比较两个关键词在Google中搜索结果数量
想知道克里和布什谁更火?那就比较一下Google的搜索结果数量就知道了。打开www.googlefight.com/,在“Keyword #1”和“Keyword #2”中分别输入“克里”和“布什”,单击“Make a fight!”按钮即可看到他们各自的结果。笔者试过,克里有741000个搜索结果,布什有4020000个搜索结果,布什获胜!
4.让Google来告诉去哪儿旅游
想好去哪儿旅游了吗?问问Google吧。打开douweosinga.com/projects/besttimetovisit站点,在“Enter the name of destination”栏中输入你想要去的城市名字,比如“北京”,点击“Go”即可获得结果。
5.有趣的关键字
在Google中输入“_*_”这个关键字,不管你是“搜索所有网页”还是“仅搜索中文网页”,你都只能搜索到一大堆中文页面。想明白这是为什么吗?到blog.outer-court.com/forum/5066.html去看看就知道了,原来这是ASCII字符和Google之间的矛盾。
Google在用户隐私资料收集方面的九大疑点
Google-Watch近日刊登文章,警告用户小心Google对隐私资料获取的“阴险”与“强硬”,并列举了Google在用户隐私资料收集方面的九大“阴谋疑点”:
1. Google的“老不死”cookie
Google是第一个使用Cookie的搜索引擎供应商,其Cookie有效时间竟然直至2038年。Google的Cookie在你的硬盘上留下独一的ID记录,当你浏览Google页面时,Google会检查你是否拥有Cookie文件,如果没有则留下新Cookie,如果已经存在便会读取旧Cookie中的信息。
2. Google记录所有能记录的资料
Google将记录所有搜索引擎用户的Cookie ID、网址IP、登录时间与日期、搜索偏好以及浏览器类型。Google还会针对你的IP地址提供给你不同的地域性搜索结果。
3. Google资料保护并不完善
Google没有任何资料保存政策,很显然,他们可以自由读取搜集到的用户个人资料。
4. Google会不会透露资料的用途
当纽约时报2002年在采访中就资料用途问题咨询Sergey Brin时,他拒绝对此发表评论。
5. Google雇佣“危险人物”
Mutt Cutts--Google重要软件工程师,曾经为美国国家安全局工作。而且Google还想雇佣更多有类似背景的人。
6. Google工具条是间谍软件
Google的免费工具条能够记录你浏览的所有页面,并且读取你的所有Cookie,Google已经在其隐私政策中承认这一点。而且Goolge工具条每次更新都无声无息,并不询问用户是否需要更新。
对于中国海监船在钓鱼岛海域巡逻被日本海上保安听船只追踪,日方称,其中一艘中国海监船一度进入日方领海,日本外务省召见中国驻日大使进行了严重抗议。
日本海上保安听称,东京时间周五凌晨6点左右,中国海监50和66号船出现在钓鱼岛附近海域,海上保安听巡逻艇向中方船只询问航行目的,中方通过无线回答说,现场海域是中国领海。
日本表示,其中一艘海监船50号东京时间上午9点半过后进入日本领海内,约25分钟后驶离。日本海上保安听派出3艘巡逻艇和1架飞机追踪。
日本首相官邸周五在危机管理中心设立情报联络室,外务次官也紧急召见中国驻日大使程永华,表示强烈抗议。
日本外务省发言人横井裕:“海监50号船入侵尖阁列岛周边日本领海,这是非常严重的事态,这种航行不是国际法上的无害航行,我国无法接受。日本对贵国船舶再度侵犯日本领海深表遗憾,并强烈抗议。”
这是中国海监船2008年12月以来时隔3年多出现在钓鱼岛海域。
作为沪汉蓉铁路的一部分,汉宜铁路近日曝出“沉降超标”事件,引起公众对铁路安全的关注。交付使用前的铁路潜江段路基路面的30%出现沉降超标,究竟有无质量问题?在水网地质条件上修建铁路,是否存在“桥改路”的设计变更?对此,施工单位中铁12局方面表示不清楚,业主方沪汉蓉铁路湖北公司予以否认,但人们更关心的是:铁路“质量安全”谁来保障?
现场
路段整修 枕木铁轨已拆卸
汉宜铁路于2009年9月动工,原计划2011年底建成并投入运营。去年“7·23”事件后,建设方推迟了通车时间,按照新的日程安排,去年底开始进行静态验收,发现了沉降超标问题。
出现沉降超标的路段在潜江市浩口镇境内,记者沿着正在施工的路基走了2公里,看到沿线的枕木、铁轨已拆卸到路基下面,路面上全是碎石。上百辆大型施工车辆正紧张施工,还有不少工程车进入整修现场。
疑问
沉降超标路面缘何逾三成
一位潜江本地负责施工的人员告诉记者,去年年底这段路出现过沉降。业主方沪汉蓉铁路湖北公司解释说,并非两次出现沉降超标,而是验收不达标后,去年底对其中1.2公里路段进行了加固试验,近期发现并不能解决问题,又对7.2公里全部采取更加到位的管桩加固措施。
工程承建方中铁12局副总经理孙圣杰说:铁路路基有一个正常沉降范围,一般是每月沉降不超过3毫米。“我们目前是静态验收,在验收过程中发现这段路出现沉降超标,除去沿线桥梁和涵洞,累计问题里程达7.2公里。”
据调查,中铁12局这次承担的是“汉宜铁路站前工程4标”,其中路基路面22.9公里,问题里程占到路基路面的31.4%。一位从事轨道交通设计的业内人说,沉降超标对列车运行有很大的安全隐患,容易导致高速运行的列车“跳车”脱轨。另外,路基有一定沉降,在工程中属于正常现象,但是超标超过7公里,超标路段在30%以上,“还是比较严重的”。
沪汉蓉铁路湖北公司介绍说,去年10月,第三方中科院武汉岩土研究所对汉宜全线141公里路基工程沉降进行评估,其他路段均达标。
调查
问题路段是否进行“桥改路”
一些在现场施工的工人透露,发生沉降超标的一带过去是个面积不小的湖,后来慢慢干了成了良田,软基土层比较多比较厚,其实更加适合修建高架桥铁路。
一位不愿透露姓名的包工头说,问题路段进行了“桥改路”:原设计是修高架桥的,但是要缩减开支,改修路基路面,出现沉降超标。
对于修改设计方案一事,中铁12局方面表示“不清楚”。
业主方沪汉蓉铁路湖北公司对此予以了否定。该公司一位不愿具名的部门负责人表示:“施工单位入场时的设计方案就是路基、不是桥,根本没有‘桥改路’的事情。”
影响
折腾下来修路比建桥花钱更多
但有关人士透露,这一段原先设计是高架桥,当时,一是由于要控制铁路“桥隧比”,二是要缩减开支,就改成了路基路面。这位人士说,一公里高架桥耗资约6000万元,而一公里路基路面不到5000万元。“但是目前这样折腾下来,这段路基路面的开支肯定已经高过了修高架桥的开支。”
根据我国铁路工程实施规范,如果要修改原设计方案,一般是施工过程中环境条件有变化,客观上要求修改;业主方出于运营、资金、管理等考虑,主动提出修改要求;还有一种原先设计发现有问题,必须修改。记者向施工方提出查看问题路段整修方案等相关书面资料,至记者发稿,也没能看到这些材料。
探寻
谁来保障铁路
“质量安全”
沉降超标究竟是设计的先天不足,还是施工过程存在问题,又或者是工程监理不负责,接受采访的多位人士都表示,“目前尚不能给出定论”。
记者致电工程设计方中铁第四勘察设计院集团有限公司,当初负责该项目的副院长手机一直关机。
湖北省铁路建设领导办公室主任王祖建表示,责任最后由哪一方承担,问题究竟有多严重以及可能会追究谁的责任,都需要专家组反复论证分析。“这需要做大量取证调查的工作。”
目前,汉宜铁路沉降超标的DK164至DK175路段正在进行管桩加固。据现场负责人介绍,管桩的密度是每隔2米一排,每排5到6根,每根深20到30米不等。“以这个密度整修好后,可保安全。”
正如不少网友说的,“沉降超标”所幸发现在通车前,有机会进行弥补。但是“所幸”背后也让人不免有些担心:铁四院是工程设计方,铁四院某公司则是工程的监理方,在工程项目中,设计与监理两方究竟需不需要回避?
据介绍,按照规定程序,汉宜铁路此次沉降问题整改完毕后,需通过专家评审,再进行包括联调联试在内的动态验收,所有程序全部通过并合格后才能正式开通。
阿富汗塔利班15日发布声明,宣布暂停与美国方面的和平对话,原因是后者立场摇摆不定。阿富汗总统卡尔扎伊15日说,阿富汗准备好在2013年提前接管国家安全防务。卡尔扎伊当天说,美国所有部队应该撤出阿富汗村庄,重新安置至各个军事基地。
塔利班:暂停一切对话
塔利班当天在一家网站用普什图语和英语发布声明,称从15日开始暂停与美方的一切和平对话。“伊斯兰酋长国已经决定,从现在起暂停已在卡塔尔开启的对话。”声明说。“阿富汗伊斯兰酋长国”是塔利班统治阿富汗时期的阿富汗国名全称。
塔利班说,美方立场“摇摆、多变、模糊”,迫使塔利班暂停所有对话,因此美方应承担所有责任。塔利班发言人扎比乌拉·穆贾希德在一处未知地点打电话告诉《纽约时报》记者,这是一份真实的声明。但他拒绝公开更多细节。
启动与塔利班的和平对话是美国和北大西洋公约组织过去两年来的重要目标之一,是保证国际安全援助部队撤离后阿富汗安全稳定的重要因素。近两个月来,和谈出现进展。
塔利班今年1月3日宣布在卡塔尔设立谈判办公室,与国际社会接触并与美国讨论释放古巴关塔那摩监狱塔利班在押人员等话题。不过,一些美国官员先前说,深层次的对话其实尚未开始。
阿政府:美军撤离村庄
阿富汗总统哈米德·卡尔扎伊15日说,阿富汗准备好在2013年提前接管国家安全防务。卡尔扎伊当天说,美国所有部队应该撤出阿富汗村庄,重新安置到各个军事基地。
阿富汗总统卡尔扎伊当天与美国国防部长利昂·帕内塔会面,谈及接管防务话题。按照原定计划,防务移交分阶段、分地区执行。美国打算今年9月底前将驻阿富汗兵力从9万降至6.8万,2014年年底前撤出大部分作战部队。国际安全援助部队届时将把全国防务全部移交给阿富汗安全部队。
美方14日以阿富汗无合适关押设施为由,把射杀平民的士兵空运至科威特。美方说,这一措施并不意味着这名士兵肯定会在阿富汗以外接受审理。但美方的说法并未消除阿方不满。据新华社
分析
塔利班失去和谈信心
一些分析师说,与释放关塔那摩监狱塔利班在押人员相关的对话至关重要,有助于双方建立和谈信心。不过,美方难以迅速回应塔利班方面的要求,导致对话流产。
《纽约时报》以一些美国官员为消息源报道,双方先前讨论过一份换囚方案。美方释放5名关押在关塔那摩的塔利班高层,把他们送往卡塔尔“软禁”,从而换取一名塔利班挟持的西方人获释。
不过,这一方案在美国国内面临阻力。一方面,尚不知晓塔利班高层人员前往卡塔尔的关押条件;另一方面,美国议员对是否应释放极端分子持怀疑态度。
美国哈佛大学约翰·肯尼迪政治学院学者迈克尔·森普尔说:“承认加入卡塔尔对话是塔利班方面迈出的重要一步。”
幕后
美兵海外犯罪很少被处罚
多年来,美军在海外的犯罪事件时有发生,但是案件审理缓慢,涉案者大多数逍遥法外。此前,在伊拉克曾经有24名手无寸铁的男子、妇女和孩子遭到屠杀。8名美国海军陆战队员受指控,在美国军事法庭的审判中,仅一人被判90天监禁。俄罗斯《真理报》这样评价:治外法权就像一份“犯罪邀请函”,美国人犯下罪行,却很少被处罚。尽管美方表示,这名在阿富汗枪杀平民的涉案士兵的离开并不代表其不会在阿富汗受审。不过阿富汗民众的愿望将会落空。因为美国绝不会允许其他国家效仿阿富汗的案例,挑战美国的治外法权。
一条人命 北约仅赔210美元
在阿富汗,如果无辜平民被驻阿北约士兵杀害,家人能够获得多少赔偿金呢?英国媒体14日报道,尽管北约各成员国的赔偿标准不尽相同,但总体上赔偿金额较少,最低仅为210美元。此外,北约各成员国赔偿机制严重缺乏,索赔程序复杂,当地民众的合法权利根本无法得到保证。西方国家往往拒绝将支付的款项称为“赔偿金”,而是美其名曰“援助款”或“抚恤金”