Sublime Text 正则表达式

工具软件zkbhj 发表了文章 • 0 个评论 • 2197 次浏览 • 2016-11-01 16:09 • 来自相关话题

示例:INSERT INTO `` VALUES ('0000451e-b917-3a8e-e8fc-6a17b95d5465', '1', '2', '3');
INSERT INTO `` VALUES ('00005e67-fcaf-6a57-2e01-aaaee3efc527', '4', '5', '6');
INSERT INTO `` VALUES ('00012412-6021-e41f-34e3-d93fcc419dcb', '7', '8', '9');




正则表达式:(^INSERT .+ \()('\S+'), ('\S+'), ('\S+'), ('\S+')\)

UPDATE `t_cert` SET user_cert1=$3, user_cert2=$4, user_cert3=$5 WHERE uid = $2 
示例二:<546>is <225>this <213>really <144>ture正则表达式:<\d+>
示例:[01:15.95]이럼 안되는데 안될거 아는데正则表达式:\[+\d+\:+\d+\.+\d+]+\S+(.*) 
示例: 9936 +正则表达式: +\d+ +\+ 
示例:
UPDATE `` SET `full_name` = '卓越工坊(北京)科技有限公司', `company_id` = 10354, `company_status` = 1, `company_type` = 10, `c_start_time` = '2022-02-22 00:00:00', `c_end_time` = '2023-02-22 23:59:59', `poi_id` = 905335 [i][b]WHERE `full_name` = '卓越工坊(北京)科技有限公司' AND `company_id` = 10354 AND `company_status` = 1 AND `company_type` = 10 AND `c_start_time` = Cast('2022-02-22 00:00:00' AS Binary(19)) AND `c_end_time` = Cast('2023-02-22 23:59:59' AS Binary(19)) AND[/b][/i] `poi_id` = 905335 LIMIT 1;
 
表达式:
WHERE.+`\s.+AND 查看全部
示例:
INSERT INTO `` VALUES ('0000451e-b917-3a8e-e8fc-6a17b95d5465', '1', '2', '3');
INSERT INTO `` VALUES ('00005e67-fcaf-6a57-2e01-aaaee3efc527', '4', '5', '6');
INSERT INTO `` VALUES ('00012412-6021-e41f-34e3-d93fcc419dcb', '7', '8', '9');




正则表达式:
(^INSERT .+ \()('\S+'), ('\S+'), ('\S+'), ('\S+')\)

UPDATE `t_cert` SET user_cert1=$3, user_cert2=$4, user_cert3=$5 WHERE uid = $2
 
示例二:
<546>is <225>this <213>really <144>ture
正则表达式:
<\d+>

示例:
[01:15.95]이럼 안되는데 안될거 아는데
正则表达式:
\[+\d+\:+\d+\.+\d+]+\S+(.*)
 
示例:
  	9936	+
正则表达式:
  	+\d+	+\+
 
示例:
UPDATE `` SET `full_name` = '卓越工坊(北京)科技有限公司', `company_id` = 10354, `company_status` = 1, `company_type` = 10, `c_start_time` = '2022-02-22 00:00:00', `c_end_time` = '2023-02-22 23:59:59', `poi_id` = 905335 [i][b]WHERE `full_name` = '卓越工坊(北京)科技有限公司' AND `company_id` = 10354 AND `company_status` = 1 AND `company_type` = 10 AND `c_start_time` = Cast('2022-02-22 00:00:00' AS Binary(19)) AND `c_end_time` = Cast('2023-02-22 23:59:59' AS Binary(19)) AND[/b][/i] `poi_id` = 905335 LIMIT 1;

 
表达式:
WHERE.+`\s.+AND 

JS如何判断变量是否定义?

回复

前端开发zkbhj 回复了问题 • 1 人关注 • 1 个回复 • 3796 次浏览 • 2016-10-17 10:02 • 来自相关话题

Yii2如何进行多库配置和操作?

回复

Yii框架zkbhj 回复了问题 • 1 人关注 • 2 个回复 • 5080 次浏览 • 2016-10-14 17:20 • 来自相关话题

PHP常用的正则表达式总结

PHPzkbhj 发表了文章 • 0 个评论 • 1320 次浏览 • 2016-10-11 17:48 • 来自相关话题

正则表达式用于字符串处理、表单验证等场合,实用高效。
 
例子:获取字符串中所有的链接的方法:
function GetAllLink($string)
{
$string = str_replace("\r","",$string);
$string = str_replace("\n","",$string);

$regex[url] = "((http|https|ftp|telnet|news):\/\/)?([a-z0-9_\-\/\.]+\.[][a-z0-9:;&#@=_~%\?\/\.\,\+\-]+)";
$regex[email] = "([a-z0-9_\-]+)@([a-z0-9_\-]+\.[a-z0-9\-\._\-]+)";

//去掉标签之间的文字
$string = eregi_replace(">[^<>]+<","><", $string);

//去掉JAVASCRIPT代码
$string = eregi_replace("<!--.*//-->","", $string);

//去掉非<a>的HTML标签
$string = eregi_replace("<[^a][^<>]*>","", $string);

//去掉EMAIL链接
$string = eregi_replace("<a([ ]+)href=([\"']*)mailto:($regex[email])([\"']*)[^>]*>","", $string);

//替换需要的网页链接
$string = eregi_replace("<a([ ]+)href=([\"']*)($regex[url])([\"']*)[^>]*>","\\3\t", $string);

$output[0] = strtok($string, "\t");
while(($temp = strtok("\t")))
{
if($temp && !in_array($temp, $output))
$output[++$i] = $temp;
}

return $output;
}验证字符串是否只含数字与英文,字符串长度并在4~16个字符之间
<?php
$str = 'a1234';
if (preg_match("^[a-zA-Z0-9]{4,16}$", $str)) {
echo "验证成功";} else {
echo "验证失敗";}?>简易的台湾身分证字号验证
<?php
$str = 'a1234';
if (preg_match("^(?:\d{15}|\d{18})$", $str)) {
echo "验证成功";
} else {
echo "验证失敗";}
?>
常用的列表一:

匹配中文字符的正则表达式: [\u4e00-\u9fa5]
评注:匹配中文还真是个头疼的事,有了这个表达式就好办了

匹配双字节字符(包括汉字在内):[^\x00-\xff]
评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)

匹配空白行的正则表达式:\n\s*\r
评注:可以用来删除空白行

匹配HTML标记的正则表达式:<(\S*?)[^>]*>.*?</\1>|<.*? />
评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力

匹配首尾空白字符的正则表达式:^\s*|\s*$
评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式

匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
评注:表单验证时很实用

匹配网址URL的正则表达式:[a-zA-z]+://[^\s]*
评注:网上流传的版本功能很有限,上面这个基本可以满足需求

匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
评注:表单验证时很实用

匹配国内电话号码:\d{3}-\d{8}|\d{4}-\d{7}
评注:匹配形式如 0511-4405222 或 021-87888822

匹配腾讯QQ号:[1-9][0-9]{4,}
评注:腾讯QQ号从10000开始

匹配中国邮政编码:[1-9]\d{5}(?!\d)
评注:中国邮政编码为6位数字

匹配身份证:\d{15}|\d{18}
评注:中国的身份证为15位或18位

匹配ip地址:\d+\.\d+\.\d+\.\d+
评注:提取ip地址时有用

 
匹配特定数字:
^[1-9]\d*$    //匹配正整数
^-[1-9]\d*$   //匹配负整数
^-?[1-9]\d*$   //匹配整数
^[1-9]\d*|0$  //匹配非负整数(正整数 + 0)
^-[1-9]\d*|0$   //匹配非正整数(负整数 + 0)
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$   //匹配正浮点数
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$  //匹配负浮点数
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$  //匹配浮点数
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$   //匹配非负浮点数(正浮点数 + 0)
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$  //匹配非正浮点数(负浮点数 + 0)评注:处理大量数据时有用,具体应用时注意修正
 
匹配特定字符串:
^[A-Za-z]+$  //匹配由26个英文字母组成的字符串
^[A-Z]+$  //匹配由26个英文字母的大写组成的字符串
^[a-z]+$  //匹配由26个英文字母的小写组成的字符串
^[A-Za-z0-9]+$  //匹配由数字和26个英文字母组成的字符串
^\w+$  //匹配由数字、26个英文字母或者下划线组成的字符串正则表达式中的特殊字符:
 
字符
意义:对于字符,通常表示按字面意义,指出接着的字符为特殊字符,不作解释。
例如:/b/匹配字符'b',通过在b 前面加一个反斜杠,也就是/b/,则该字符变成特殊字符,表示
匹配一个单词的分界线。
或者:
对于几个字符,通常说明是特殊的,指出紧接着的字符不是特殊的,而应该按字面解释。
例如:*是一个特殊字符,匹配任意个字符(包括0个字符);例如:/a*/意味匹配0个或多个a。
为了匹配字面上的*,在a前面加一个反斜杠;例如:/a*/匹配'a*'。

字符^
意义:表示匹配的字符必须在最前边。
例如:/^A/不匹配"an A,"中的'A',但匹配"An A."中最前面的'A'。

字符$
意义:与^类似,匹配最末的字符。
例如:/t$/不匹配"eater"中的't',但匹配"eat"中的't'。

字符*
意义:匹配*前面的字符0次或n次。
例如:/bo*/匹配"A ghost booooed"中的'boooo'或"A bird warbled"中的'b',但不匹配"A goat g
runted"中的任何字符。

字符+
意义:匹配+号前面的字符1次或n次。等价于{1,}。
例如:/a+/匹配"candy"中的'a'和"caaaaaaandy."中的所有'a'。

字符?
意义:匹配?前面的字符0次或1次。
例如:/e?le?/匹配"angel"中的'el'和"angle."中的'le'。

字符.
意义:(小数点)匹配除换行符外的所有单个的字符。
例如:/.n/匹配"nay, an apple is on the tree"中的'an'和'on',但不匹配'nay'。

字符(x)
意义:匹配'x'并记录匹配的值。
例如:/(foo)/匹配和记录"foo bar."中的'foo'。匹配子串能被结果数组中的素[1], ..., [n] 返
回,或被RegExp对象的属性$1, ..., $9返回。

字符x|y
意义:匹配'x'或者'y'。
例如:/green|red/匹配"green apple"中的'green'和"red apple."中的'red'。

字符{n}
意义:这里的n是一个正整数。匹配前面的n个字符。
例如:/a{2}/不匹配"candy,"中的'a',但匹配"caandy," 中的所有'a'和"caaandy."中前面的两个
'a'。

字符{n,}
意义:这里的n是一个正整数。匹配至少n个前面的字符。
例如:/a{2,}不匹配"candy"中的'a',但匹配"caandy"中的所有'a'和"caaaaaaandy."中的所有'a'

字符{n,m}
意义:这里的n和m都是正整数。匹配至少n个最多m个前面的字符。
例如:/a{1,3}/不匹配"cndy"中的任何字符,但匹配 "candy,"中的'a',"caandy," 中的前面两个
'a'和"caaaaaaandy"中前面的三个'a',注意:即使"caaaaaaandy" 中有很多个'a',但只匹配前面的三
个'a'即"aaa"。

字符[xyz]
意义:一字符列表,匹配列出中的任一字符。你可以通过连字符-指出一个字符范围。
例如:[abcd]跟[a-c]一样。它们匹配"brisket"中的'b'和"ache"中的'c'。

字符[^xyz]
意义:一字符补集,也就是说,它匹配除了列出的字符外的所有东西。 你可以使用连字符-指出一
字符范围。
例如:[^abc]和[^a-c]等价,它们最早匹配"brisket"中的'r'和"chop."中的'h'。

字符
意义:匹配一个空格(不要与b混淆)

字符b
意义:匹配一个单词的分界线,比如一个空格(不要与混淆)
例如:/bnw/匹配"noonday"中的'no',/wyb/匹配"possibly yesterday."中的'ly'。

字符B
意义:匹配一个单词的非分界线
例如:/wBn/匹配"noonday"中的'on',/yBw/匹配"possibly yesterday."中的'ye'。

字符cX
意义:这里的X是一个控制字符。匹配一个字符串的控制字符。
例如:/cM/匹配一个字符串中的control-M。

字符d
意义:匹配一个数字,等价于[0-9]。
例如:/d/或/[0-9]/匹配"B2 is the suite number."中的'2'。

字符D
意义:匹配任何的非数字,等价于[^0-9]。
例如:/D/或/[^0-9]/匹配"B2 is the suite number."中的'B'。

字符f
意义:匹配一个表单符

字符n
意义:匹配一个换行符

字符r
意义:匹配一个回车符

字符s
意义:匹配一个单个white空格符,包括空格,tab,form feed,换行符,等价于[ fnrtv]。
例如:/sw*/匹配"foo bar."中的' bar'。

字符S
意义:匹配除white空格符以外的一个单个的字符,等价于[^ fnrtv]。
例如:/S/w*匹配"foo bar."中的'foo'。

字符t
意义:匹配一个制表符

字符v
意义:匹配一个顶头制表符

字符w
意义:匹配所有的数字和字母以及下划线,等价于[A-Za-z0-9_]。
例如:/w/匹配"apple,"中的'a',"$5.28,"中的'5'和"3D."中的'3'。

字符W
意义:匹配除数字、字母外及下划线外的其它字符,等价于[^A-Za-z0-9_]。
例如:/W/或者/[^$A-Za-z0-9_]/匹配"50%."中的'%'。

字符n
意义:这里的n是一个正整数。匹配一个正则表达式的最后一个子串的n的值(计数左圆括号)。
例如:/apple(,)sorange1/匹配"apple, orange, cherry, peach."中的'apple, orange',下面
有一个更加完整的例子。
注意:如果左圆括号中的数字比n指定的数字还小,则n取下一行的八进制escape作为描述。

字符ooctal和xhex
意义:这里的ooctal是一个八进制的escape值,而xhex是一个十六进制的escape值,允许在一个正则表达式中嵌入ASCII码。
 
 
 
  查看全部
正则表达式用于字符串处理、表单验证等场合,实用高效。
 
例子:获取字符串中所有的链接的方法:
function GetAllLink($string) 
{
$string = str_replace("\r","",$string);
$string = str_replace("\n","",$string);

$regex[url] = "((http|https|ftp|telnet|news):\/\/)?([a-z0-9_\-\/\.]+\.[][a-z0-9:;&#@=_~%\?\/\.\,\+\-]+)";
$regex[email] = "([a-z0-9_\-]+)@([a-z0-9_\-]+\.[a-z0-9\-\._\-]+)";

//去掉标签之间的文字
$string = eregi_replace(">[^<>]+<","><", $string);

//去掉JAVASCRIPT代码
$string = eregi_replace("<!--.*//-->","", $string);

//去掉非<a>的HTML标签
$string = eregi_replace("<[^a][^<>]*>","", $string);

//去掉EMAIL链接
$string = eregi_replace("<a([ ]+)href=([\"']*)mailto:($regex[email])([\"']*)[^>]*>","", $string);

//替换需要的网页链接
$string = eregi_replace("<a([ ]+)href=([\"']*)($regex[url])([\"']*)[^>]*>","\\3\t", $string);

$output[0] = strtok($string, "\t");
while(($temp = strtok("\t")))
{
if($temp && !in_array($temp, $output))
$output[++$i] = $temp;
}

return $output;
}
验证字符串是否只含数字与英文,字符串长度并在4~16个字符之间
<?php 
$str = 'a1234';
if (preg_match("^[a-zA-Z0-9]{4,16}$", $str)) {
echo "验证成功";} else {
echo "验证失敗";}?>
简易的台湾身分证字号验证
<?php 
$str = 'a1234';
if (preg_match("^(?:\d{15}|\d{18})$", $str)) {
echo "验证成功";
} else {
echo "验证失敗";}
?>

常用的列表一:


匹配中文字符的正则表达式: [\u4e00-\u9fa5]
评注:匹配中文还真是个头疼的事,有了这个表达式就好办了

匹配双字节字符(包括汉字在内):[^\x00-\xff]
评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)

匹配空白行的正则表达式:\n\s*\r
评注:可以用来删除空白行

匹配HTML标记的正则表达式:<(\S*?)[^>]*>.*?</\1>|<.*? />
评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力

匹配首尾空白字符的正则表达式:^\s*|\s*$
评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式

匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
评注:表单验证时很实用

匹配网址URL的正则表达式:[a-zA-z]+://[^\s]*
评注:网上流传的版本功能很有限,上面这个基本可以满足需求

匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
评注:表单验证时很实用

匹配国内电话号码:\d{3}-\d{8}|\d{4}-\d{7}
评注:匹配形式如 0511-4405222 或 021-87888822

匹配腾讯QQ号:[1-9][0-9]{4,}
评注:腾讯QQ号从10000开始

匹配中国邮政编码:[1-9]\d{5}(?!\d)
评注:中国邮政编码为6位数字

匹配身份证:\d{15}|\d{18}
评注:中国的身份证为15位或18位

匹配ip地址:\d+\.\d+\.\d+\.\d+
评注:提取ip地址时有用


 
匹配特定数字:
^[1-9]\d*$    //匹配正整数
^-[1-9]\d*$   //匹配负整数
^-?[1-9]\d*$   //匹配整数
^[1-9]\d*|0$  //匹配非负整数(正整数 + 0)
^-[1-9]\d*|0$   //匹配非正整数(负整数 + 0)
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$   //匹配正浮点数
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$  //匹配负浮点数
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$  //匹配浮点数
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$   //匹配非负浮点数(正浮点数 + 0)
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$  //匹配非正浮点数(负浮点数 + 0)
评注:处理大量数据时有用,具体应用时注意修正
 
匹配特定字符串:
^[A-Za-z]+$  //匹配由26个英文字母组成的字符串
^[A-Z]+$  //匹配由26个英文字母的大写组成的字符串
^[a-z]+$  //匹配由26个英文字母的小写组成的字符串
^[A-Za-z0-9]+$  //匹配由数字和26个英文字母组成的字符串
^\w+$  //匹配由数字、26个英文字母或者下划线组成的字符串
正则表达式中的特殊字符:
 
字符
意义:对于字符,通常表示按字面意义,指出接着的字符为特殊字符,不作解释。
例如:/b/匹配字符'b',通过在b 前面加一个反斜杠,也就是/b/,则该字符变成特殊字符,表示
匹配一个单词的分界线。
或者:
对于几个字符,通常说明是特殊的,指出紧接着的字符不是特殊的,而应该按字面解释。
例如:*是一个特殊字符,匹配任意个字符(包括0个字符);例如:/a*/意味匹配0个或多个a。
为了匹配字面上的*,在a前面加一个反斜杠;例如:/a*/匹配'a*'。

字符^
意义:表示匹配的字符必须在最前边。
例如:/^A/不匹配"an A,"中的'A',但匹配"An A."中最前面的'A'。

字符$
意义:与^类似,匹配最末的字符。
例如:/t$/不匹配"eater"中的't',但匹配"eat"中的't'。

字符*
意义:匹配*前面的字符0次或n次。
例如:/bo*/匹配"A ghost booooed"中的'boooo'或"A bird warbled"中的'b',但不匹配"A goat g
runted"中的任何字符。

字符+
意义:匹配+号前面的字符1次或n次。等价于{1,}。
例如:/a+/匹配"candy"中的'a'和"caaaaaaandy."中的所有'a'。

字符?
意义:匹配?前面的字符0次或1次。
例如:/e?le?/匹配"angel"中的'el'和"angle."中的'le'。

字符.
意义:(小数点)匹配除换行符外的所有单个的字符。
例如:/.n/匹配"nay, an apple is on the tree"中的'an'和'on',但不匹配'nay'。

字符(x)
意义:匹配'x'并记录匹配的值。
例如:/(foo)/匹配和记录"foo bar."中的'foo'。匹配子串能被结果数组中的素[1], ..., [n] 返
回,或被RegExp对象的属性$1, ..., $9返回。

字符x|y
意义:匹配'x'或者'y'。
例如:/green|red/匹配"green apple"中的'green'和"red apple."中的'red'。

字符{n}
意义:这里的n是一个正整数。匹配前面的n个字符。
例如:/a{2}/不匹配"candy,"中的'a',但匹配"caandy," 中的所有'a'和"caaandy."中前面的两个
'a'。

字符{n,}
意义:这里的n是一个正整数。匹配至少n个前面的字符。
例如:/a{2,}不匹配"candy"中的'a',但匹配"caandy"中的所有'a'和"caaaaaaandy."中的所有'a'

字符{n,m}
意义:这里的n和m都是正整数。匹配至少n个最多m个前面的字符。
例如:/a{1,3}/不匹配"cndy"中的任何字符,但匹配 "candy,"中的'a',"caandy," 中的前面两个
'a'和"caaaaaaandy"中前面的三个'a',注意:即使"caaaaaaandy" 中有很多个'a',但只匹配前面的三
个'a'即"aaa"。

字符[xyz]
意义:一字符列表,匹配列出中的任一字符。你可以通过连字符-指出一个字符范围。
例如:[abcd]跟[a-c]一样。它们匹配"brisket"中的'b'和"ache"中的'c'。

字符[^xyz]
意义:一字符补集,也就是说,它匹配除了列出的字符外的所有东西。 你可以使用连字符-指出一
字符范围。
例如:[^abc]和[^a-c]等价,它们最早匹配"brisket"中的'r'和"chop."中的'h'。

字符
意义:匹配一个空格(不要与b混淆)

字符b
意义:匹配一个单词的分界线,比如一个空格(不要与混淆)
例如:/bnw/匹配"noonday"中的'no',/wyb/匹配"possibly yesterday."中的'ly'。

字符B
意义:匹配一个单词的非分界线
例如:/wBn/匹配"noonday"中的'on',/yBw/匹配"possibly yesterday."中的'ye'。

字符cX
意义:这里的X是一个控制字符。匹配一个字符串的控制字符。
例如:/cM/匹配一个字符串中的control-M。

字符d
意义:匹配一个数字,等价于[0-9]。
例如:/d/或/[0-9]/匹配"B2 is the suite number."中的'2'。

字符D
意义:匹配任何的非数字,等价于[^0-9]。
例如:/D/或/[^0-9]/匹配"B2 is the suite number."中的'B'。

字符f
意义:匹配一个表单符

字符n
意义:匹配一个换行符

字符r
意义:匹配一个回车符

字符s
意义:匹配一个单个white空格符,包括空格,tab,form feed,换行符,等价于[ fnrtv]。
例如:/sw*/匹配"foo bar."中的' bar'。

字符S
意义:匹配除white空格符以外的一个单个的字符,等价于[^ fnrtv]。
例如:/S/w*匹配"foo bar."中的'foo'。

字符t
意义:匹配一个制表符

字符v
意义:匹配一个顶头制表符

字符w
意义:匹配所有的数字和字母以及下划线,等价于[A-Za-z0-9_]。
例如:/w/匹配"apple,"中的'a',"$5.28,"中的'5'和"3D."中的'3'。

字符W
意义:匹配除数字、字母外及下划线外的其它字符,等价于[^A-Za-z0-9_]。
例如:/W/或者/[^$A-Za-z0-9_]/匹配"50%."中的'%'。

字符n
意义:这里的n是一个正整数。匹配一个正则表达式的最后一个子串的n的值(计数左圆括号)。
例如:/apple(,)sorange1/匹配"apple, orange, cherry, peach."中的'apple, orange',下面
有一个更加完整的例子。
注意:如果左圆括号中的数字比n指定的数字还小,则n取下一行的八进制escape作为描述。

字符ooctal和xhex
意义:这里的ooctal是一个八进制的escape值,而xhex是一个十六进制的escape值,允许在一个正则表达式中嵌入ASCII码。
 
 
 
 

如何屏蔽网站的某些系统不被搜索引擎收录?

回复

工具软件zkbhj 回复了问题 • 1 人关注 • 1 个回复 • 2797 次浏览 • 2016-10-11 17:40 • 来自相关话题

java时间戳13位和PHP时间戳10位的转换

PHPzkbhj 发表了文章 • 0 个评论 • 2265 次浏览 • 2016-10-10 15:38 • 来自相关话题

由于精度不同,导致长度不一致,直接转换错误。 
JAVA时间戳长度是13位,单位毫秒,如:1294890876859 
PHP时间戳长度是10位,单位秒, 如:1294890859 
 
主要最后三位的不同,JAVA时间戳在PHP中使用,去掉后三位,如:1294890876859-> 1294890876 结果:2011-01-13 11:54:36echo date('Y-m-d H:i:s','1294890876');
复制代码PHP时间戳在JAVA中使用,最后加三位,用000补充
如:1294890859->1294890859000
结果:2011-01-13 11:54:19

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateTime = df.format(1294890859000L);
System.out.println(df); 查看全部
由于精度不同,导致长度不一致,直接转换错误。 
JAVA时间戳长度是13位,单位毫秒,如:1294890876859 
PHP时间戳长度是10位,单位秒, 如:1294890859 
 
主要最后三位的不同,JAVA时间戳在PHP中使用,去掉后三位,如:1294890876859-> 1294890876 结果:2011-01-13 11:54:36
echo date('Y-m-d H:i:s','1294890876');
复制代码PHP时间戳在JAVA中使用,最后加三位,用000补充
如:1294890859->1294890859000
结果:2011-01-13 11:54:19

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateTime = df.format(1294890859000L);
System.out.println(df);

CURL命令如何发送POST请求?

回复

服务器zkbhj 回复了问题 • 1 人关注 • 1 个回复 • 4163 次浏览 • 2016-10-04 15:44 • 来自相关话题

返回加*后的手机号和邮箱地址方法

PHPzkbhj 发表了文章 • 0 个评论 • 1601 次浏览 • 2016-09-29 10:34 • 来自相关话题

【邮箱只保留邮箱前缀的后两位】/*
* 获取账号(手机号、邮箱)的隐藏字符串
* @param string $accountNumber 账号内容
* @param string $type 账号类型
*/
public static function getHideAccount($accountNumber,$type = "phone"){
$result = "";
switch($type){
case "phone":
{
$pattern = '/(\d{3})(\d{4})(\d{4})/i';
$replacement = '$1****$3';
$result = preg_replace($pattern, $replacement,$accountNumber);
}
break;
case "email":
{
$arr = explode('@', $accountNumber);
$rest = substr($arr[0], 0, -2);
$arr[0] = str_replace($rest, str_repeat('*', strlen($rest)), $arr[0]);
$result = $arr[0]."@".$arr[1];
}
break;
default:
{
$pattern = '/(\d{3})(\d{4})(\d{4})/i';
$replacement = '$1****$3';
$result = preg_replace($pattern, $replacement,$accountNumber);
}

}
return $result;
}【邮箱保留邮箱前缀的第一位和最后一位】
/*
* 获取账号(手机号、邮箱)的隐藏字符串
* @param string $accountNumber 账号内容
* @param string $type 账号类型
*/
public static function getHideAccount($accountNumber,$type = "phone"){
$result = "";
if(!empty($accountNumber)){
switch($type){
case "phone":
{
$pattern = '/(\d{3})(\d{4})(\d{4})/i';
$replacement = '$1****$3';
$result = preg_replace($pattern, $replacement,$accountNumber);
}
break;
case "email":
{
$arr = explode('@', $accountNumber);
$rest_start = substr($arr[0], 0, 1);
//如果邮箱前缀长度是2,最后一个字符直接用*号代替
if(strlen($arr[0])==2)
$rest_end = "*";
else
$rest_end = substr($arr[0], -1, 1);
$midelString = str_repeat('*', strlen($arr[0])-2);
$result = $rest_start.$midelString.$rest_end."@".$arr[1];
}
break;
default:
{
$pattern = '/(\d{3})(\d{4})(\d{4})/i';
$replacement = '$1****$3';
$result = preg_replace($pattern, $replacement,$accountNumber);
}

}
}

return $result;
} 查看全部
【邮箱只保留邮箱前缀的后两位】
/*
* 获取账号(手机号、邮箱)的隐藏字符串
* @param string $accountNumber 账号内容
* @param string $type 账号类型
*/
public static function getHideAccount($accountNumber,$type = "phone"){
$result = "";
switch($type){
case "phone":
{
$pattern = '/(\d{3})(\d{4})(\d{4})/i';
$replacement = '$1****$3';
$result = preg_replace($pattern, $replacement,$accountNumber);
}
break;
case "email":
{
$arr = explode('@', $accountNumber);
$rest = substr($arr[0], 0, -2);
$arr[0] = str_replace($rest, str_repeat('*', strlen($rest)), $arr[0]);
$result = $arr[0]."@".$arr[1];
}
break;
default:
{
$pattern = '/(\d{3})(\d{4})(\d{4})/i';
$replacement = '$1****$3';
$result = preg_replace($pattern, $replacement,$accountNumber);
}

}
return $result;
}
【邮箱保留邮箱前缀的第一位和最后一位】
/*
* 获取账号(手机号、邮箱)的隐藏字符串
* @param string $accountNumber 账号内容
* @param string $type 账号类型
*/
public static function getHideAccount($accountNumber,$type = "phone"){
$result = "";
if(!empty($accountNumber)){
switch($type){
case "phone":
{
$pattern = '/(\d{3})(\d{4})(\d{4})/i';
$replacement = '$1****$3';
$result = preg_replace($pattern, $replacement,$accountNumber);
}
break;
case "email":
{
$arr = explode('@', $accountNumber);
$rest_start = substr($arr[0], 0, 1);
//如果邮箱前缀长度是2,最后一个字符直接用*号代替
if(strlen($arr[0])==2)
$rest_end = "*";
else
$rest_end = substr($arr[0], -1, 1);
$midelString = str_repeat('*', strlen($arr[0])-2);
$result = $rest_start.$midelString.$rest_end."@".$arr[1];
}
break;
default:
{
$pattern = '/(\d{3})(\d{4})(\d{4})/i';
$replacement = '$1****$3';
$result = preg_replace($pattern, $replacement,$accountNumber);
}

}
}

return $result;
}

【AngularJS 2】Why Angular2

AngularJS 2zkbhj 发表了文章 • 0 个评论 • 1630 次浏览 • 2016-09-21 11:25 • 来自相关话题

Why Angular2

Angular1.x显然非常成功,那么,为什么要剧烈地转向Angular2?
 
性能的限制
AngularJS当初是提供给设计人员用来快速构建HTML表单的一个内部工具。随着时间的推移,各种特性 被加入进去以适应不同场景下的应用开发。然而由于最初的架构限制(比如绑定和模板机制),性能的 提升已经非常困难了。

快速变化的WEB

在语言方面,ECMAScript6的标准已经完成,这意味着浏览器将很快支持例如模块、类、lambda表达式、 generator等新的特性,而这些特性将显著地改变JavaScript的开发体验。

在开发模式方面,Web组件也将很快实现。然而现有的框架,包括Angular1.x对WEB组件的支持都不够好。

移动化

想想5年前......现在的计算模式已经发生了显著地变化,到处都是手机和平板。Angular1.x没有针对移动 应用特别优化,并且缺少一些关键的特性,比如:缓存预编译的视图、触控支持等。

简单易用

说实话,Angular1.x太复杂了,学习曲线太陡峭了,这让人望而生畏。Angular团队希望在Angular2中将复杂性 封装地更好一些,让暴露出来的概念和开发接口更简单。 查看全部
Why Angular2

Angular1.x显然非常成功,那么,为什么要剧烈地转向Angular2?
 
性能的限制
AngularJS当初是提供给设计人员用来快速构建HTML表单的一个内部工具。随着时间的推移,各种特性 被加入进去以适应不同场景下的应用开发。然而由于最初的架构限制(比如绑定和模板机制),性能的 提升已经非常困难了。

快速变化的WEB

在语言方面,ECMAScript6的标准已经完成,这意味着浏览器将很快支持例如模块、类、lambda表达式、 generator等新的特性,而这些特性将显著地改变JavaScript的开发体验。

在开发模式方面,Web组件也将很快实现。然而现有的框架,包括Angular1.x对WEB组件的支持都不够好。

移动化

想想5年前......现在的计算模式已经发生了显著地变化,到处都是手机和平板。Angular1.x没有针对移动 应用特别优化,并且缺少一些关键的特性,比如:缓存预编译的视图、触控支持等。

简单易用

说实话,Angular1.x太复杂了,学习曲线太陡峭了,这让人望而生畏。Angular团队希望在Angular2中将复杂性 封装地更好一些,让暴露出来的概念和开发接口更简单。

MVVM架构的简单解析

专业名词zkbhj 发表了文章 • 0 个评论 • 1445 次浏览 • 2016-09-20 16:50 • 来自相关话题

在SilverLight或者WPF开发中,为什么要用MVVM架构

使用MVVM架构最大的好处是:开发人员在写程序的时候不需要做UI,而设计人员可以使用Microsoft Expression Blend 4+设计全部的UI并且不需要写任何代码。
 







主要的好处如下:

1、设计人员可以用设计工具很容易的设计UI,而且不需要写任何代码

2、你可以更好的设计UI,而且可以让即使不是开发人员使用。

3、可以先设计UI或者与开发同时设计。

4、当UI全部改变时,代码可以不改变。

为了达到以上要求。当你设计UI时,后台不能有任何代码。并且UI与应用程序通过Bindings和Commands相互交互,其中Bindings和Commands在ViewModel中设计。 
The Model





 
Model层主要为应用程序提供数据。其主要包含

1、Web Services:SilverLight应用程序的特点就是必须通过Web service取得数据,你可以调用Web Service中的方法。

2、Rest Services:和Web Services一样

3、Generic Collections:任何类型的数据集合
 
The View Model
 





 
View Model一般有以下三个部分组成

1、属性:一个事物,它的类型可以是一个字符型,也可以是一个对象。实现接口INotifyPropertyChanged,那么任何UI元素绑定到这个属性,不管这个属性什么时候改变都能自动和UI层交互。

2、集合:事物的集合,它的类型一般是ObservableCollection,因此,任何UI元素绑定到它,不管这个集合什么时候改变,都可以自动的与UI交互。

3、Commands:一个可以被触发的事件,并且可以传递一个类型为Object的参数。但是前提是要实现接口ICommand。
 
The View
 





 
这一层可以用Expression Blend设计,不用写任何代码。

主要有以下三个部分组成

1、把View Model层的属性绑定到 text box, radio button, toggle button, MediaElement, trigger an animation or ViewState change

2、把View Model层的集合绑定到ListBox,TreeView,DataGrid

3、Commands

使用InvokeCommandAction实现以下behavior

A、绑定View Model层的ICommand

B、指出你需要实现的ICommand(比如Click事件,Selected事件。。。)

C、传递参数 查看全部
在SilverLight或者WPF开发中,为什么要用MVVM架构

使用MVVM架构最大的好处是:开发人员在写程序的时候不需要做UI,而设计人员可以使用Microsoft Expression Blend 4+设计全部的UI并且不需要写任何代码。
 

img16.jpg



主要的好处如下:

1、设计人员可以用设计工具很容易的设计UI,而且不需要写任何代码

2、你可以更好的设计UI,而且可以让即使不是开发人员使用。

3、可以先设计UI或者与开发同时设计。

4、当UI全部改变时,代码可以不改变。

为了达到以上要求。当你设计UI时,后台不能有任何代码。并且UI与应用程序通过Bindings和Commands相互交互,其中Bindings和Commands在ViewModel中设计。 
The Model

1.png

 
Model层主要为应用程序提供数据。其主要包含

1、Web Services:SilverLight应用程序的特点就是必须通过Web service取得数据,你可以调用Web Service中的方法。

2、Rest Services:和Web Services一样

3、Generic Collections:任何类型的数据集合
 
The View Model
 

2.png

 
View Model一般有以下三个部分组成

1、属性:一个事物,它的类型可以是一个字符型,也可以是一个对象。实现接口INotifyPropertyChanged,那么任何UI元素绑定到这个属性,不管这个属性什么时候改变都能自动和UI层交互。

2、集合:事物的集合,它的类型一般是ObservableCollection,因此,任何UI元素绑定到它,不管这个集合什么时候改变,都可以自动的与UI交互。

3、Commands:一个可以被触发的事件,并且可以传递一个类型为Object的参数。但是前提是要实现接口ICommand。
 
The View
 

3.png

 
这一层可以用Expression Blend设计,不用写任何代码。

主要有以下三个部分组成

1、把View Model层的属性绑定到 text box, radio button, toggle button, MediaElement, trigger an animation or ViewState change

2、把View Model层的集合绑定到ListBox,TreeView,DataGrid

3、Commands

使用InvokeCommandAction实现以下behavior

A、绑定View Model层的ICommand

B、指出你需要实现的ICommand(比如Click事件,Selected事件。。。)

C、传递参数