常用正则表达式(?i)忽略字母的大小写!

转载自:http://blog.csdn.net/iwanttoknow7/article/details/5773285

1^/d+$  //匹配非负整数(正整数 + 0) 

2 ^ [ 0 - 9 ] * [ 1 - 9 ][ 0 - 9 ] * $   // 匹配正整数 
3 ^ (( - /d + ) | ( 0 + ))$   // 匹配非正整数(负整数 + 0) 
4 ^- [ 0 - 9 ] * [ 1 - 9 ][ 0 - 9 ] * $   // 匹配负整数 
5 ^-? /d + $     // 匹配整数 
6 ^ /d + (/./d + ) ? $   // 匹配非负浮点数(正浮点数 + 0) 
7 ^ (([ 0 - 9 ] + /.[ 0 - 9 ] * [ 1 - 9 ][ 0 - 9 ] * ) | ([ 0 - 9 ] * [ 1 - 9 ][ 0 - 9 ] * /.[ 0 - 9 ] + ) | ([ 0 - 9 ] * [ 1 - 9 ][ 0 - 9 ] * ))$   // 匹配正浮点数 
8 ^ (( - /d + (/./d + ) ? ) | ( 0 + (/. 0 + ) ? ))$   // 匹配非正浮点数(负浮点数 + 0) 
9 ^ ( - (([ 0 - 9 ] + /.[ 0 - 9 ] * [ 1 - 9 ][ 0 - 9 ] * ) | ([ 0 - 9 ] * [ 1 - 9 ][ 0 - 9 ] * /.[ 0 - 9 ] + ) | ([ 0 - 9 ] * [ 1 - 9 ][ 0 - 9 ] * )))$   // 匹配负浮点数 
10 ^ ( -? /d + )(/./d + ) ? $   // 匹配浮点数 
11 ^ [A - Za - z] + $   // 匹配由26个英文字母组成的字符串 
12 ^ [A - Z] + $   // 匹配由26个英文字母的大写组成的字符串 
13 ^ [a - z] + $   // 匹配由26个英文字母的小写组成的字符串 
14 ^ [A - Za - z0 - 9 ] + $   // 匹配由数字和26个英文字母组成的字符串 
15 ^ /w + $   // 匹配由数字、26个英文字母或者下划线组成的字符串 
16 ^ [/w - ] + (/.[/w - ] + ) * @[/w - ] + (/.[/w - ] + ) + $     // 匹配email地址 
17 ^ [a - zA - z] + : // 匹配(/w+(-/w+)*)(/.(/w+(-/w+)*))*(/?/S*)?$   // 匹配url 
18 。匹配中文字符的正则表达式: [/u4e00 - /u9fa5]
19 。匹配双字节字符(包括汉字在内):[ ^ /x00 - /xff]
20 。应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
String.prototype.len
= function(){ return   this .replace([ ^ /x00 - /xff] / g, " aa " ).length;}
21 。匹配空行的正则表达式:/n[/s |  ] * /r
22 。匹配HTML标记的正则表达式: /< (. * ) > . *< / / / 1 >|< (. * ) / />/  
23 。匹配首尾空格的正则表达式:( ^ /s * ) | (/s * $)

*  正则表达式用例
  
*   1 ^ /S + [a - z A - Z]$ 不能为空 不能有空格  只能是英文字母
  
*   2 、/S{ 6 ,}         不能为空 六位以上
  
*   3 ^ /d + $          不能有空格 不能非数字
  
*   4 、(. * )(/.jpg | /.bmp)$ 只能是jpg和bmp格式
  
*   5 ^ /d{ 4 }/ - /d{ 1 , 2 } - /d{ 1 , 2 }$ 只能是2004 - 10 - 22格式
  
*   6 ^ 0 $            至少选一项
  
*   7 ^ 0 { 2 ,}$        至少选两项
  
*   8 ^ [/s | /S]{ 20 ,}$ 不能为空 二十字以上
  
*   9 ^ / +? [a - z0 - 9 ](([ -+ .] | [_] + ) ? [a - z0 - 9 ] + ) * @([a - z0 - 9 ] + (/. | / - )) + [a - z]{ 2 , 6 }$邮件
  
*   10 、/w + ([ -+ .]/w + ) * @/w + ([ - .]/w + ) * /./w + ([ - .]/w + ) * ([,;]/s * /w + ([ -+ .]/w + ) * @/w + ([ - .]/w + ) * /./w + ([ - .]/w + ) * ) *  输入多个地址用逗号或空格分隔邮件
  
*   11 ^ (/([ 0 - 9 ] + /)) ? [ 0 - 9 ]{ 7 , 8 }$电话号码7位或8位或前面有区号例如( 022 87341628
  
*   12 ^ [a - z A - 0 - 9  _] + @[a - z A - 0 - 9  _] + (/.[a - z A - 0 - 9  _] + ) + (/,[a - z A - 0 - 9  _] + @[a - z A - 0 - 9  _] + (/.[a - z A - 0 - 9  _] + ) + ) * $
  
*      只能是字母、数字、下划线;必须有@和.同时格式要规范 邮件
  
*   13   ^ /w + @/w + (/./w + ) + (/,/w + @/w + (/./w + ) + ) * $上面表达式也可以写成这样子,更精练。
    
14     ^ /w + (( - /w + ) | (/./w + )) * /@/w + ((/. |- )/w + ) * /./w +

  

  

  

//  限定条件
          final  String CONDITION  =   " (?=.*[a-z])(?=.*[A-Z])(?=.*//d) " ;

        
//  允许出现的字符
          final  String SPECIAL_CHAR  =   " [-A-Za-z0-9!$%&()/;<?{}//[//]^] " ;

        
//  数量
          final  String QUANTITY  =   " {8,16} "

  

1  楼的回复

(
?= . * [a - z]) 表示当前位置后面必须出现 . * [a - z] 的字符,这个可以理解为必须出现小写字母。
或者可以理解为某一个字符间的缝隙必须满足的条件,这个仅仅作为条件判断并不能匹配任何字
符,因为这属于非捕获组中的环视(lookarround)零宽度匹配。

举个大家常见的例子:

表达式:Win(
?= XP)
现有字符串 WinXP 和 WinNT,在应用这个表达式时前者能与之进行匹配,为什么呢?

当匹配器指示到 (
?= XP) 时,也就是在 n 字母后面的缝隙,这个缝隙必须满足的
条件是:后面的字符必须是 XP,如果是的话,匹配成功,否则匹配失败。由于
(
?= XP) 是匹配缝隙的,因此并不会把 XP 给匹配输出,而只输出了 Win 因此,这
个表达式的语义可以看作是:找到后面为“XP”字符所有的 Win。

假如,我们把表达式写成 Win(
?= XP)( ?= NT) 这样的话,那么这个语义是:找出后面
为“XP”并且为“NT”字符所有的 Win 可以想象,这是个
永远无法满足的匹配。(
?= XP)( ?= NT) 这个表示当前的缝隙必须同时满足的条件。

把这个表达式再改一下,改成 Win(
?= . * XP)( ?= . * NT) 这个表示 Win 的后面必须出现
XP 与 NT,位置和顺序都是无关的(这主要是 .
*  的作用)。当然了这个表达式的效
率是比较低的,得向后进行两次断言。

如果字符串是 WincbaXPabcNT 这个字符串,当匹配指示器走到 n 后面的缝隙时开始
进行向后断言,首先对 .
* XP 进行断言,很明显能将 cbaXP 匹配成功,这时第一个断
言完成,再对 .
* NT 断言,可以看出 cbaXPabcNT 能与其匹配成功,这时第二个断言完
成,因此表达式 Win(
?= . * XP)( ?= . * NT) 能对 WincbaXPabcNT 进行匹配。

同理 WincbaNTabcXP 也是同样的效果。

如果能理解上面的这些,对于 (
?= . * [a - z])( ?= . * [A - Z])( ?= . * //d) 这个的理应该不会
很难吧,这个只不过是必须同时满足三个条件。

这个表达式在开始部分就进行断言,即索引为 
0  的地方,也就是第一个字符的前面的
缝隙,这个缝隙后面的字符必须满足 .
* [a - z]  . * [A - Z]  . * //d  三个条件,也就是说
必后面必须出现至少一个小写字母、至少一个大写母、至少一个数字。


至于表达式 
2  的使用,也就是 [  ] 内字符的转义需要注意一下。

^  和  -  在 [  ] 结构的表达式中是有一定意义的。

[
^ abc] 表示除 abc 以外所有的字符,注意,这是放在最前面表示这个意思,
如果改成 [a
^ bc] 这个仅表示 a  ^  b c 四个字符。如果需要匹配  ^  这个字符
的话,千万不要把它放在第一个,如果一定要放在第一个的话,得使用转义符。

-  在 [  ] 表示字符的范围,比如 [a - z] 表示 a 与 z 之间的  26  个字母,
[a
- zA - Z] 这个表示 a - z 和 A - Z 的  52  个字母。使用范围得注意了,如果写成
[z
- a] 的话,在 Pattern.compile 编译表达式时会对范围进行检查,这时会产
生异常,因此在使用 
-  范围时,后面的 Unicode 值必须大于等于前面的 Unicode
值。

如果要匹配“
- ”的话,尽量不要把  -  这个放在字符之间,可以放在 [  ] 的两边。
比如 [
- a - z] 这就能匹配  26  个小写字母和“ - ”了。当然了,我们也可以写成
[a
- z - A - Z] 这个可以匹配  52  字母和“ - ”,但是这样很不直观,我们宁愿写成
[a
- zA - Z - ] 或者 [ - a - zA - Z] 这样。 

  

  

2 :不以某某开头 ,比如不以www开头


Java code 
public   class  Test { 
    
public   static   void  main(String[] args) {
        String[] strs 
=  {  " abc1232 " " wwwadsf " " awwwfas " " wwadfsf " "" " ww " "   " " www "  }; 
        String regex 
=   " (?:(?!^www).)* "
        
for (String str : strs) { 

            System.out.printf(
" %-7s %s%n " , str, str.matches(regex));
        }
    }



(
?! X) 专业名称为 Negative Lookahead,表示字符间缝隙后面不允许出现的字符,
即匹配字符间的缝隙,如果缝隙后的字符不是 X 的话,那这个缝隙就匹配成功。

举个例子,aab 和 aac,现有表达式 aa(
?! b) 这时我们能匹配到的字符串是 aac,
因为 aa 的后面的缝隙之后不允许出现字符 b,因此只有 aac 进行了匹配。

再来看个示例: 

Java code 

public   class  Test {
    
public   static   void  main(String[] args) {
        String str 
=   " AQuickBrownFoxJumpsOverTheLazyDog " ;
        String[] strs 
=  str.split( " (?<!^)(?=[A-Z]) " );
        
for (String s : strs) {
            System.out.println(s);
        } 
    }



根据大写字母拆分字符串。当然了,这个使用字符串进行分析同样也能进行拆分,
但是使用正则表达式来拆的话更为便捷直观一些。

在进行这种拆分时,由于在拆分后的字符数不能减少,因此只能使用零宽度的
lookaround 功能进行匹配,lookaround 包括四个,即: 

Java code 
(
?= X) ( ?! X) ( ?<= X) ( ?<! X) 


来看一下这个表达式:(
?   <!^ )( ?= [A - Z])

前面说到过 (
?! ) 表示缝隙后面不允许出现的东西,而 ( ?   <! ) 表示缝隙前不允许出现的东西。
(
?= ) 表示缝隙后允许出现的东西,( ?   <= ) 表示缝隙前允许出现的东西。

这个表达式在拆分时,根据零宽度匹配缝隙进行拆分的,这个缝隙必须满足以下条件:

(
?   <!^ ) 表示缝隙不允许前不能是行开始,即缝隙不能出现在首字母的前面。
(
?= [A - Z]) 表示缝隙后面允许出现 A - Z 的大写字母。

这时这个表达式就匹配了下面带有 
|  的缝隙: 

Java code 
A
| Quick | Brown | Fox | Jumps | Over | The | Lazy | DogPS:不加 ( ?<!^ ) 的话,会变成: | A | Quick | Brown | Fox | Jumps | Over | The | Lazy | Dog 


根据 split 的功能,正则表达式处理程序就根据上面的 
|  将字符串给拆分开来了。


3 ,不区分大小写
不加任何限制的匹配是匹配分大小写的,但是正则表达式中可以进行改变,
有两种方式:参数式和内嵌式。

来看个示例: 

Java code 
import  java.util.regex.Matcher;
import  java.util.regex.Pattern;
public   class  Test {
    
public   static   void  main(String[] args) {
        String str 
=   " Book "
        Pattern pattern 
=  Pattern.compile( " book " );
        Matcher matcher 
=  pattern.matcher(str);
        System.out.println(matcher.matches()); 
    }



上面的这个表达式 book 是不能匹配字符串 Book 的,这时我们只要给定编译时的参数就可以了:

Pattern pattern 
=  Pattern.compile( " book " , Pattern.CASE_INSENSITIVE);

Pattern.CASE_INSENSITIVE 这是一个 
int  类型的常量,值为  2 。表示表达式忽略大小写进行区配。

如果我们不采用 Pattern 和 Matcher 两个类来匹配的话,只是使用 String 的 matches 方法的话,
我们就不能指定表达式的编译参数了,这时就需要采用内嵌标志表达式了,与 Pattern.CASE_INSENSITIVE
对应的内嵌标志表达式是 (
? i),它有四种形式:
1 ,( ? i)
2 ,( ?- i)
3 ,( ? i:X)
4 ,( ?- i:X)
不带有 
-  的是开标志,带有  -  的是关标志。

把上面的代码改成这样: 

Java code 
public   class  Test {
    
public   static   void  main(String[] args) {
        String str 
=   " Book " ;
        String regex 
=   " (?i)book "
        System.out.println(str.matches(regex));
    }



我们就达到了同样的效果,当然这样并不是最好的,因为字符串中只有 B 是大写的,
我们没有必要把所有的字符都进行不区分大小写匹配,我们可以在打开标志,用 (
? i) 的
第二种形式马上关掉它:
    String regex 
=   " (?i)b(?-i)ook " ;

这样的话,只有 b 是区分大小写了,而 (
?- i) 后面的还是得区分大小写匹配的。这样写
可能看上去很不顺眼,我们还能使用第 
3  种形式直接指定某些字符是不区分大小写的。
    String regex 
=   " (?i:b)ook " ;

这样的表达式与上面的那个在语义上是相同的。就效率上肯定是优于一下子开,一下子关的。

可见内嵌标志表达式要比指定编译参数的功能强大许多。

使用建议:如果能确定某些字符的大小写时,尽量使用已确定的字符,对于不确定的可以采用
(
? i:X) 的方式指定。因此打开不区分大小写开关时,对匹配的性能是有一定影响的。

思考一下:String regex 
=   " (?i)b(?-i:oo)k " ; 这个表达式的意思?


另外:第 
1  和第  4 ,我没看明白需要了解什么,请在下面的楼层中具体地说明一下。 

  

1 :多行匹配

在默认的情况下 . 是不能匹配行结束符的(行结束符有 
6  个,具体的可以看看 Pattern 的 API DOC)
同样,可以像不匹配大小写匹配那样使用编译参数:Pattern.DOTALL

如果还得区分大小写的话,还得加上上面说到的 Pattern.CASE_INSENSITIVE 这个,举个例子: 

Java code 
import  java.util.regex.Matcher;
import  java.util.regex.Pattern;
public   class  Test {
    
public   static   void  main(String[] args) {
        String str 
=   " <table> /n "   +   "  <tr> /n "   +   "  <td> /n "   +   "  Hello World! /n "   +   "  </td> /n "   +   "  </tr> /n "   +   " </table> " ;
        String regex 
=   " <td>(.+?)</td> "
        Pattern pattern 
=  Pattern.compile(regex);
        Matcher matcher 
=  pattern.matcher(str);
        
while (matcher.find()) { 
            System.out.println(matcher.group(
1 ).trim()); 
        }
    }



上面这个是不能从 str 抽取出东西的,因为 td 的后面带有换行符,我们只要更改一下:

Pattern pattern 
=  Pattern.compile(regex, Pattern.DOTALL);

这样就行了,如果 td 还得不区分大小写的话,再改成: 

Java code 
Pattern pattern 
=  Pattern.compile(regex, Pattern.DOTALL  |  Pattern.CASE_INSENSITIVE); 


这样的话,td 哪怕是大写的这个表达式都能把 td 之间的字符区抽取出来。

当然和 Pattern.CASE_INSENSITIVE 一样,Pattern.DOTALL 也有内嵌标志表达式,即 (
? s)
s 的意思表示 single
- line 就是忽略换行符什么的,只看成单行进行处理。

这个表达式使用内嵌 (
? s) 的话可以改为: 

Java code 
String regex 
=   " (?s)<td>(.+?)</td> " ;如果还要不区分大小写的话,再加上 i 标志:String regex  =   " (?s)(?i)<td>(.+?)</td> " ;但这样显得很拖沓,可以把它们合并起来:String regex  =   " (?is)<td>(.+?)</td> " //  秩序无所谓 


最后需要说明一下的是,我曾看到过由于不明白 DOTALL,为了让 . 匹配行结束符,直接把表达式写成: 

Java code 
String regex 
=   " <td>((.|//s)+?)</td> "


这样做是极其危险的,由于选择结构的匹配效率问题,这样做在比较长的字符串时会造成堆栈溢出,
使程序崩溃,如果使用 DOTALL 或者 (
? s) 的话就不会出现这种情况。


4 :2个单元的或操作

|  称为多选结构,用于匹配  |  之中的任何一个,拿你的例子来说明: 

Java code 
import  java.util.regex.Matcher;
import  java.util.regex.Pattern;
public   class  Test { 
    
public   static   void  main(String[] args) { 
        String str 
=   " <img src=/ " http: // www.google.com/1.gif/"/>/n" + "<img src=/" http://3w.google.com/1.gif /"/>/n" + "<img src=/" http://abc.baidu.com/1.gif /"/>";
        String regex  =   " <img//ssrc=/ " http: // (?:ww|3)w.google.com/1.gif/"/>";
        Pattern pattern  =  Pattern.compile(regex);
        Matcher matcher 
=  pattern.matcher(str); 
        
while (matcher.find()) { 
            System.out.println(matcher.group()); 
        } 
    }



注意到其中的 (
? :ww | 3 ) 在进行多选匹配时尽量找出多选中的规律,以减少多选的字符,
www 和 3w 在最后一个字符可以共用,前面的不一样。

(
? : ) 的意思表示组成一组,如果没有 ( ? : ) 这样的话,表达式就变成了: 

Java code 
String regex 
=   " <img//ssrc=/ " http: // ww|3w.google.com/1.gif/"/>"; 


这样的语义完全变掉了,
|  是在一组中进行选择,由于上面的那个表达式中没有组,就把整个表
达式作为了一组,使用 
|  的话,就进行了整个表达式的多选结构了。这个表达式的意思是:
匹配 
< img ssrc = " http://ww 或者是 3w.google.com/1.gif " /> ,这样的结果并不是我们所要的。

我们仅仅需要在 ww 和 
3  之间进行选择,这时只要把 ww 和  3  放在一组中进行多选择就可以了,
变成 (
? :ww | 3 )。

还有,在多选结构中尽量把出现频率高的放在前面,这样可以加快匹配速度。

多选结构的效率在传统型的引擎中是效率低下的,如果是单个字符的选择,比如 a $ 
&  之中的一个,
那就不要使用 (
? :a | $ |& ) 了,可以直接使用字符类 [a$ & ] 就可以了。

说了那么多,不知道是否明白了? 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/352818.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

内存刷新机制

red log buffer、data buffer、binlog cache。在O和M中&#xff0c;讲究日志先行策略&#xff0c;就是一条DML语句进入数据库之后&#xff0c;都会先写日志&#xff0c;再写数据文件。 1.red log&#xff0c; 重做日志文件&#xff0c;用于记录事务操作的变化&#xff0c;记录的…

android 字符串对齐,android – 使用Spanable String对齐ImageSpan

我知道有很多相同类型的问题可供使用,我尝试了很多解决方案,但所有这些问题都达不到我的要求.我的问题是我必须在包含Spanable字符串和Imagespan的文本之间添加动态行间距,但是当我添加行间距时,文本和图像的对齐会变形.我已经尝试了Stackoverflow上几乎所有可用的解决方案,如t…

如何将JBoss HR员工奖励项目放入云端

我们一直在讨论为什么应用程序开发人员在App Dev Cloud Stack系列中不能再忽略其堆栈了。 我们从头到尾讨论了各个层&#xff0c;但尚未为您提供除Red Hat Container Development Kit&#xff08;CDK&#xff09;之外的任何应用程序开发工具。 到目前为止&#xff0c;您所拥有…

用JIRA管理你的项目

https://blog.csdn.net/gaowenhui2008/article/details/70241657 (一) JIRA环境搭建 转载于:https://www.cnblogs.com/eustoma/p/9637509.html

ArcGIS编辑操作的常用快捷键一览表

在ArcMap中&#xff0c;快捷键与一些编辑工具和命令相关联。使用快捷键能使编辑工作更加快捷有效&#xff0c;总结如下&#xff1a; 一、公共快捷键&#xff08;对所有编辑工具有效&#xff09;&#xff1a; Z&#xff1a;放大 X&#xff1a;缩小 C&#xff1a;漫游 V&#xff…

javaone_JavaOne 2012:使用HTML5和Java构建移动应用程序

javaone我返回了Parc 55 &#xff08;任务会议室&#xff09;&#xff0c;观看Max Katz的&#xff08; Exadel开发人员关系&#xff09;“使用HTML5和Java构建移动应用程序” Bird-of-Feather&#xff08;BoF&#xff09;演示文稿。 具体来说&#xff0c;Katz在Tiggzi &#xf…

android recyclerview 横向item 宽度,RecyclerView的item宽度不能全屏显示及线性布局与grid布局切换混乱解决方法...

1.RecyclerView的Item宽度不能全屏显示出现这种的原因有两种&#xff1a;1.第一种是在adapter中加载inflater时parent传入为null2.如果第一种不行&#xff0c;第二种原因就是在RecyclerView外随意加一层布局即可充满解决方法&#xff0c;在onCreateViewHolder按照如下修改&…

剑指offer(一):二维数组中的查找

题目&#xff1a; 在一个二维数组中&#xff08;每个一维数组的长度相同&#xff09;&#xff0c;每一行都按照从左到右递增的顺序排序&#xff0c;每一列都按照从上到下递增的顺序排序。请完成一个函数&#xff0c;输入这样的一个二维数组和一个整数&#xff0c;判断数组中是否…

sed以及awk的替换命令

转载自&#xff1a;http://blog.csdn.net/imzoer/article/details/8721590 先看sed 的。 比如说&#xff0c; 在上面使用sed替换每行第一个出现的nau为n_a_u。 如果加上g参数&#xff0c;那么对已一行&#xff0c;每次遇到一个nau就要替换一次。 -----------------------------…

图片下载中文传输转义问题

// 定义utf-8转义失败&#xff0c;中文是一串什么3E%什么的 URLEncoder.encode((productName".jpeg"), "UTF-8") // 改成如下代码 new String((productName ".jpeg").getBytes("utf-8"), "ISO8859-1") 转载于:https://www.…

NetBeans Java EE技巧8:持久性单元

任何好的IDE的基本目标都是简化和组织代码和开发工作流程。 NetBeans在实现这些目标方面做得非常出色&#xff0c;有时我们将基础知识视为理所当然。 例如&#xff0c;如果您曾经试图在纯文本编辑器中阅读XML蒙上了双眼&#xff0c;那么过去在配置和使用Persistence Units时可能…

c语言循环链表中设立尾链表,C语言实现双向非循环链表(带头结点尾结点)的节点插入...

对于双向链表&#xff0c;个人推荐使用带头结点尾结点的方式来处理会比较方便。我在《C语言实现双向非循环链表(不带头结点)的节点插入》中详细实现了在不带头结点的情况下的插入。这次我们将会来在使用头结点尾结点的情况下在任意的位置插入元素。代码上传至 https://github.c…

ls实现列文件按时间排序

转载自&#xff1a;http://blog.csdn.net/gtuu0123/article/details/4420424 1) ls -lt 时间最近的在前面 2) ls -ltr 时间从前到后 3) 利用sort ls -l | sort 7 (日期为第8列) 时间从前到后 ls -l | sort -r 7 时间最近的在前面

sqlserver添加默认值

知识点&#xff1a; sql添加字段默认值时&#xff1a;1.如果有加 not null &#xff0c;则已有记录该字段值更新为默认值2.如果没有加 not null&#xff0c;则为null代码&#xff1a; IF EXISTS ( SELECT TOP 11FROM INFORMATION_SCHEMA.COLUMNSWHERE [TABLE_NAME] Produ…

android服务器 性能,Android性能优化(中)

Android性能优化在上一篇中介绍了性能优化的概念、内存泄漏和性能优化方式Android性能优化(上)我们继续说说Android性能优化数据库性能优化索引简单的说&#xff0c;索引就像书本的目录&#xff0c;目录可以快速找到所在页数&#xff0c;数据库中索引可以帮助快速找到数据&…

jvm系列二之GC收集器

目录 参考概念理解并发和并行吞吐量GC垃圾收集器Serial New收集器Parallel New&#xff08;并行&#xff09;收集器Parallel Scavenge&#xff08;并行&#xff09;收集器Serial Old&#xff08;串行&#xff09;收集器Parallel Old&#xff08;并行&#xff09;收集器CMS收集器…

shell脚本中一些特殊符号

在shell中常用的特殊符号罗列如下&#xff1a; # ; ;; . , / \\ string| ! $ ${} $? $$ $* \"string\"* ** ? : ^ $# $ command{} [] [[]] () (()) || && {xx,yy,zz,...}~ ~ ~- & \\<...\\> - % ! # 井号 (…

java 并发执行_Java并发执行器的懒惰开发人员简介

java 并发执行如果我告诉您util.concurrent API自2004年起提供此类服务&#xff0c;我就会自欺欺人。但是&#xff0c;我想回顾一下一些很酷的功能。 并发专家&#xff0c;现在是时候关闭该窗口了。 所有其他人&#xff0c;请保持紧紧的乐趣。 你不会忘记你的根源 执行程序是具…

球球大作战测试服android版,球球大作战10.0体验服

在球球大作战10.0体验服中&#xff0c;2019球球们将迎来全新的冒险&#xff0c;多重外观&#xff0c;更加的绚丽夺目&#xff0c;探索新的地图&#xff0c;与不同的对手较量一番&#xff0c;无限吞噬&#xff0c;热血竞技&#xff0c;灵活的走位&#xff0c;搭配强力道具&#…

单线程的并发,协程

IO多路复用 作用:检测多个socket是否已经发生变化(是否已经连接成功/是否已经获取数据) setblocking(Flase) 让原本阻塞的变成非阻塞(不等待)状态 import socket import selectsk socket.socket() sk.setblocking(False) try:sk.connect(("www.baidu.com",80)) exce…