??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
用法很简单,是在web.xml中加?
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
相关代码如下Q?br />接口c?br />public interface RMI_Add extends java.rmi.Remote {
public long add(long a, long b, long c) throws java.rmi.RemoteException;
}
实现c?br />import java.rmi.Naming;
public class RMI_AddImpl extends java.rmi.server.UnicastRemoteObject implements RMI_Add {
public RMI_AddImpl() throws java.rmi.RemoteException {
super();
}
public long add(long a, long b, long c) throws java.rmi.RemoteException {
return a + b + c;
}
public static void main(String[] args) {
try {
RMI_Add d = new RMI_AddImpl();
Naming.rebind("rmi://127.0.0.1:1099/RMI_AddService", d);
} catch (Exception e) {
e.printStackTrace();
}
}
}
客户?br />import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RMISecurityManager;
import java.rmi.RemoteException;
public class Client {
public static void main(String[] args) {
System.setSecurityManager(new RMISecurityManager());
try {
RMI_Add t = (RMI_Add) Naming.lookup("rmi://127.0.0.1:1099/RMI_AddService");
for (int i = 0; i < 10; i++)
System.out.println("Perfect time =" + t.add(1, 2, 3));
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
} catch (NotBoundException e) {
e.printStackTrace();
}
}
}
一条最单的安全{略,它允怓Q何h做Q何事,对于你的更加关键性的应用,你必L定更加详l安全策略?br />grant {
permission java.security.AllPermission "", "";
};
相关命o(h)
rmic -classpath . -d . RMI_AddImpl
start rmiregistry 1099
java -Djava.rmi.server.codebase=file:///E:/workspace/rmi/ RMI_AddImpl
java -Djava.security.policy=policy.txt Client
关于索引Q推荐{载的q篇文章
http://blog.csdn.net/dutguoyi/archive/2006/01/10/575617.aspx
改善SQL语句的效?br />http://community.csdn.net/Expert/topic/5087/5087396.xml?temp=.345669
数据量很大怎样加快索检速度
http://community.csdn.net/Expert/topic/5058/5058320.xml?temp=.1229517
索引建立Ҏ(gu)的区?br />http://community.csdn.net/Expert/topic/5068/5068154.xml?temp=.3010218
频繁插入删除数据需要更新烦?br />http://community.csdn.net/Expert/topic/4937/4937910.xml?temp=.8428614
试了一下sql server 2005 全文?br />http://community.csdn.net/Expert/topic/4878/4878430.xml?temp=.6049311
其他关于效率的高频问?/p>
判断一个表的数据不在另一个表中最优秀Ҏ(gu)Q?br />http://community.csdn.net/Expert/topic/5038/5038742.xml?temp=.4704553
删除千万U表中重复记录的办法
http://community.csdn.net/Expert/topic/5089/5089261.xml?temp=.7907068
数据库数据查询变得不正常cd问题
大数据量Q稳定运行一D|候以后无法得到查询结果?br />http://community.csdn.net/Expert/topic/4810/4810464.xml?temp=9.014529E-02
正则表达式是烦琐的,但是强大的,学会(x)之后的应用会(x)让你除了提高效率外,?x)给你带来绝对的成就感。只要认真去阅读q些资料Q加上应用的时候进行一定的参考,掌握正则表达式不是问题?/p>
索引
1._引子
2._正则表达式的历史
3._正则表达式定?/font>
3.1_普通字W?/font>
3.2_非打印字W?/a>
3.3_Ҏ(gu)字符
3.4_限定W?/a>
3.5_定位W?/a>
3.6_选择
3.7_后向引用
4._各种操作W的q算优先U?/font>
5._全部W号解释
6._部分例子
7._正则表达式匹配规?/font>
目前Q正则表辑ּ已经在很多Y件中得到q泛的应用,包括*nixQLinux, Unix{)QHP{操作系l,PHPQC#QJava{开发环境,以及(qing)很多的应用Y件中Q都可以看到正则表达式的影子?/p>
正则表达式的使用Q可以通过单的办法来实现强大的功能。ؓ(f)了简单有效而又不失强大Q造成了正则表辑ּ代码的难度较大,学习(fn)h也不是很Ҏ(gu)Q所以需要付Z些努力才行,入门之后参照一定的参考,使用hq是比较单有效的?/p>
例子Q?span style="BACKGROUND-COLOR: #00ffff"> ^.+@.+\\..+$
q样的代码曾l多ơ把我自q吓退q。可能很多h也是被这L(fng)代码l吓跑的吧。l阅L文将让你也可以自由应用这L(fng)代码?/p>
注意Q这里的W?部分跟前面的内容看v来似乎有些重复,目的是把前面表格里的部分重新描述了一ơ,目的是让q些内容更容易理解?/p>
1956 q? 一位叫 Stephen Kleene 的数学家?McCulloch ?Pitts 早期工作的基上,发表了一标题ؓ(f)“神l网事g的表C法”的论文Q引入了正则表达式的概念。正则表辑ּ是用来描述他称为“正则集的代数”的表达式,因此采用“正则表辑ּ”这个术语?/p>
随后Q发现可以将q一工作应用于?Ken Thompson 的计搜索算法的一些早期研IӞKen Thompson ?Unix 的主要发明h。正则表辑ּ的第一个实用应用程序就?Unix 中的 qed ~辑器?/p>
如他们所_(d)剩下的就是众所周知的历史了。从那时L(fng)至现在正则表辑ּ都是Z文本的编辑器和搜索工具中的一个重要部分?/p>
正则表达式是由普通字W(例如字符 a ?zQ以?qing)特D字W(UCؓ(f)元字W)l成的文字模式。正则表辑ּ作ؓ(f)一个模板,某个字W模式与所搜烦的字W串q行匚w?/p>
特别字符 | 说明 |
---|---|
$ | 匚w输入字符串的l尾位置。如果设|了 RegExp 对象?Multiline 属性,?$ 也匹?'\n' ?'\r'。要匚w $ 字符本nQ请使用 \$?/td> |
( ) | 标记一个子表达式的开始和l束位置。子表达式可以获取供以后使用。要匚wq些字符Q请使用 \( ?\)?/td> |
* | 匚w前面的子表达式零ơ或多次。要匚w * 字符Q请使用 \*?/td> |
+ | 匚w前面的子表达式一ơ或多次。要匚w + 字符Q请使用 \+?/td> |
. | 匚w除换行符 \n之外的Q何单字符。要匚w .Q请使用 \?/td> |
[ | 标记一个中括号表达式的开始。要匚w [Q请使用 \[?/td> |
? | 匚w前面的子表达式零ơ或一ơ,或指明一个非贪婪限定W。要匚w ? 字符Q请使用 \??/td> |
\ | 下一个字W标Cؓ(f)或特D字W、或原义字符、或向后引用、或八进制{义符。例如, 'n' 匚w字符 'n'?\n' 匚w换行W。序?'\\' 匚w "\"Q?'\(' 则匹?"("?/td> |
^ | 匚w输入字符串的开始位|,除非在方括号表达式中使用Q此时它表示不接受该字符集合。要匚w ^ 字符本nQ请使用 \^?/td> |
{ | 标记限定W表辑ּ的开始。要匚w {Q请使用 \{?/td> |
| | 指明两项之间的一个选择。要匚w |Q请使用 \|?/td> |
- 构造正则表辑ּ的方法和创徏数学表达式的Ҏ(gu)一栗也是用多U元字符与操作符小的表辑ּl合在一h创徏更大的表辑ּ。正则表辑ּ的组件可以是单个的字W、字W集合、字W范围、字W间的选择或者所有这些组件的Ll合?/strong>
字符 | 描述 |
---|---|
\ | 下一个字W标Cؓ(f)一个特D字W、或一个原义字W、或一?向后引用、或一个八q制转义W。例如,'n' 匚w字符 "n"?\n' 匚w一个换行符。序?'\\' 匚w "\" ?"\(" 则匹?"("?/td> |
^ | 匚w输入字符串的开始位|。如果设|了 RegExp 对象?Multiline 属性,^ 也匹?'\n' ?'\r' 之后的位|?/td> |
$ | 匚w输入字符串的l束位置。如果设|了RegExp 对象?Multiline 属性,$ 也匹?'\n' ?'\r' 之前的位|?/td> |
* | 匚w前面的子表达式零ơ或多次。例如,zo* 能匹?"z" 以及(qing) "zoo"? {h(hun)于{0,}?/td> |
+ | 匚w前面的子表达式一ơ或多次。例如,'zo+' 能匹?"zo" 以及(qing) "zoo"Q但不能匚w "z"? {h(hun)?{1,}?/td> |
? | 匚w前面的子表达式零ơ或一ơ。例如,"do(es)?" 可以匚w "do" ?"does" 中的"do" ? {h(hun)?{0,1}?/td> |
{n} | n 是一个非负整数。匹配确定的 n ơ。例如,'o{2}' 不能匚w "Bob" 中的 'o'Q但是能匚w "food" 中的两个 o?/td> |
{n,} | n 是一个非负整数。至匹配n ơ。例如,'o{2,}' 不能匚w "Bob" 中的 'o'Q但能匹?"foooood" 中的所?o?o{1,}' {h(hun)?'o+'?o{0,}' 则等价于 'o*'?/td> |
{n,m} | m ?n 均ؓ(f)非负整数Q其中n <= m。最匹?n ơ且最多匹?m ơ。例如,"o{1,3}" 匹?"fooooood" 中的前三?o?o{0,1}' {h(hun)?'o?'。请注意在逗号和两个数之间不能有空根{?/td> |
? | 当该字符紧跟在Q何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面Ӟ匚w模式是非贪婪的。非贪婪模式可能少的匹配所搜烦的字W串Q而默认的贪婪模式则尽可能多的匚w所搜烦的字W串。例如,对于字符?"oooo"Q?o+?' 匹配单?"o"Q?'o+' 匹配所?'o'?/td> |
. | 匚w?"\n" 之外的Q何单个字W。要匚w包括 '\n' 在内的Q何字W,请用象 '[.\n]' 的模式?/td> |
(pattern) | 匚w pattern q获取这一匚w。所获取的匹配可以从产生?Matches 集合得到Q在VBScript 中?SubMatches 集合Q在JScript 中则使用 $0?9 属性。要匚w圆括号字W,请?'\(' ?'\)'?/td> |
(?:pattern) | 匚w pattern 但不获取匚wl果Q也是说这是一个非获取匚wQ不q行存储供以后用。这在?"? 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 是一个比 'industry|industries' 更简略的表达式?/td> |
(?=pattern) | 正向预查Q在M匚w pattern 的字W串开始处匚w查找字符丌Ӏ这是一个非获取匚wQ也是_(d)该匹配不需要获取供以后使用。例如,'Windows (?=95|98|NT|2000)' 能匹?"Windows 2000" 中的 "Windows" Q但不能匚w "Windows 3.1" 中的 "Windows"。预查不消耗字W,也就是说Q在一个匹配发生后Q在最后一ơ匹配之后立卛_始下一ơ匹配的搜烦Q而不是从包含预查的字W之后开始?/td> |
(?!pattern) | 负向预查Q在M不匹?pattern 的字W串开始处匚w查找字符丌Ӏ这是一个非获取匚wQ也是_(d)该匹配不需要获取供以后使用。例?Windows (?!95|98|NT|2000)' 能匹?"Windows 3.1" 中的 "Windows"Q但不能匚w "Windows 2000" 中的 "Windows"。预查不消耗字W,也就是说Q在一个匹配发生后Q在最后一ơ匹配之后立卛_始下一ơ匹配的搜烦Q而不是从包含预查的字W之后开?/td> |
x|y | 匚w x ?y。例如,'z|food' 能匹?"z" ?"food"?(z|f)ood' 则匹?"zood" ?"food"?/td> |
[xyz] | 字符集合。匹配所包含的Q意一个字W。例如, '[abc]' 可以匚w "plain" 中的 'a'?/td> |
[^xyz] | 负值字W集合。匹配未包含的Q意字W。例如, '[^abc]' 可以匚w "plain" 中的'p'?/td> |
[a-z] | 字符范围。匹配指定范围内的Q意字W。例如,'[a-z]' 可以匚w 'a' ?'z' 范围内的L写字母字符?/td> |
[^a-z] | 负值字W范围。匹配Q何不在指定范围内的Q意字W。例如,'[^a-z]' 可以匚wM不在 'a' ?'z' 范围内的L字符?/td> |
\b | 匚w一个单词边界,也就是指单词和空格间的位|。例如, 'er\b' 可以匚w"never" 中的 'er'Q但不能匚w "verb" 中的 'er'?/td> |
\B | 匚w非单词边界?er\B' 能匹?"verb" 中的 'er'Q但不能匚w "never" 中的 'er'?/td> |
\cx | 匚w?x 指明的控制字W。例如, \cM 匚w一?Control-M 或回车符。x 的值必Mؓ(f) A-Z ?a-z 之一。否则,?c 视ؓ(f)一个原义的 'c' 字符?/td> |
\d | 匚w一个数字字W。等价于 [0-9]?/td> |
\D | 匚w一个非数字字符。等价于 [^0-9]?/td> |
\f | 匚w一个换늬。等价于 \x0c ?\cL?/td> |
\n | 匚w一个换行符。等价于 \x0a ?\cJ?/td> |
\r | 匚w一个回车符。等价于 \x0d ?\cM?/td> |
\s | 匚wMI白字符Q包括空根{制表符、换늬{等。等价于 [ \f\n\r\t\v]?/td> |
\S | 匚wM非空白字W。等价于 [^ \f\n\r\t\v]?/td> |
\t | 匚w一个制表符。等价于 \x09 ?\cI?/td> |
\v | 匚w一个垂直制表符。等价于 \x0b ?\cK?/td> |
\w | 匚w包括下划U的M单词字符。等价于'[A-Za-z0-9_]'?/td> |
\W | 匚wM非单词字W。等价于 '[^A-Za-z0-9_]'?/td> |
\xn | 匚w nQ其?n 为十六进制{义倹{十六进制{义值必Mؓ(f)定的两个数字长。例如,'\x41' 匚w "A"?\x041' 则等价于 '\x04' & "1"。正则表辑ּ中可以?ASCII ~码? |
\num | 匚w numQ其?num 是一个正整数。对所获取的匹配的引用。例如,'(.)\1' 匚w两个q箋的相同字W?/td> |
\n | 标识一个八q制转义值或一个向后引用。如?\n 之前臛_ n 个获取的子表辑ּQ则 n 为向后引用。否则,如果 n 为八q制数字 (0-7)Q则 n Z个八q制转义倹{?/td> |
\nm | 标识一个八q制转义值或一个向后引用。如?\nm 之前臛_?nm 个获得子表达式,?nm 为向后引用。如?\nm 之前臛_?n 个获取,?n Z个后跟文?m 的向后引用。如果前面的条g都不满Q若 n ?m 均ؓ(f)八进制数?(0-7)Q则 \nm 匹配八q制转义?nm?/td> |
\nml | 如果 n 为八q制数字 (0-3)Q且 m ?l 均ؓ(f)八进制数?(0-7)Q则匚w八进制{义?nml?/td> |
\un | 匚w nQ其?n 是一个用四个十六q制数字表示?Unicode 字符。例如, \u00A9 匚w版权W号 (?)?/td> |
正则表达?/th> | 说明 |
---|---|
/\b([a-z]+) \1\b/gi | 一个单词连l出现的位置 |
/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/ | 一个URL解析为协议、域、端口及(qing)相对路径 |
/^(?:Chapter|Section) [1-9][0-9]{0,1}$/ | 定位章节的位|?/td> |
/[-a-z]/ | A至z?6个字母再加一?受?/td> |
/ter\b/ | 可匹配chapterQ而不能terminal |
/\Bapt/ | 可匹配chapterQ而不能aptitude |
/Windows(?=95 |98 |NT )/ | 可匹配Windows95或Windows98或WindowsNT,当找C个匹配后Q从Windows后面开始进行下一ơ的索匹配?/td> |
^once
q个模式包含一个特D的字符^Q表C模式只匹配那些以once开头的字符丌Ӏ例如该模式与字W串"once upon a time"匚wQ与"There once was a man from NewYork"不匹配。正如如^W号表示开头一P$W号用来匚w那些以给定模式结字符丌Ӏ?/p>
bucket$
q个模式?Who kept all of this cash in a bucket"匚wQ与"buckets"不匹配。字W^?同时使用Ӟ表示_匚wQ字W串与模式一P。例如:(x)
^bucket$
只匹配字W串"bucket"。如果一个模式不包括^?Q那么它与Q何包含该模式的字W串匚w。例如:(x)模式
once
与字W串
There once was a man from NewYork
Who kept all of his cash in a bucket.
是匹配的?br />
在该模式中的字母(o-n-c-e)是字面的字符Q也是_(d)他们表示该字母本w,数字也是一L(fng)。其他一些稍微复杂的字符Q如标点W号和白字符Q空根{制表符{)Q要用到转义序列。所有的转义序列都用反斜?\)打头。制表符的{义序列是Q\t。所以如果我们要一个字W串是否以制表符开_(d)可以用这个模式:(x)
^\t
cM的,用\n表示“新行”,\r表示回R。其他的Ҏ(gu)W号Q可以用在前面加上反斜杠Q如反斜杠本w用\\表示Q句?用\.表示Q以此类推?br /> ^[a-z][0-9]$ 管[a-z]代表26个字母的范围Q但在这里它只能与第一个字W是写字母的字W串匚w?br /> ^[^0-9][0-9]$ q个模式?&5"?g7"?-2"是匹配的Q但?12"?66"是不匚w的。下面是几个排除特定字符的例子:(x) [^a-z] //除了写字母以外的所有字W? Ҏ(gu)字符"." (点,句号)在正规表辑ּ中用来表C除了“新行”之外的所有字W。所以模?^.5$"与Q何两个字W的、以数字5l尾和以其他非“新行”字W开头的字符串匹配。模?."可以匚wM字符Ԍ除了IZ和只包括一个“新行”的字符丌Ӏ?br /> 字符?含义 7.3 定重复出现 字符?含义 q些例子描述了花括号的三U不同的用法。一个数字,{x}的意思是“前面的字符或字W簇只出现xơ”;一个数字加逗号Q{x,}的意思是“前面的内容出现x或更多的ơ数”;两个用逗号分隔的数字,{x,y}表示“前面的内容臛_出现xơ,但不过yơ”。我们可以把模式扩展到更多的单词或数字:(x) ^[a-zA-Z0-9_]{1,}$ //所有包含一个以上的字母、数字或下划U的字符? 最后一个例子不太好理解Q是吗?q么看吧Q与所有以一个可选的负号(\-{0,1})开?^)、跟着0个或更多的数?[0-9]{0,})、和一个可选的数?\.{0,1})再跟?个或多个数字([0-9]{0,})Qƈ且没有其他Q何东?$)。下面你知道能够用的更ؓ(f)单的Ҏ(gu)?br /> ^\-?[0-9]{0,}\.?[0-9]{0,}$ Ҏ(gu)字符"*"与{0,}是相{的Q它们都代表着?个或多个前面的内容”。最后,字符"+"?{1,}是相{的Q表C?个或多个前面的内容”,所以上面的4个例子可以写成:(x) ^[a-zA-Z0-9_]+$ //所有包含一个以上的字母、数字或下划U的字符? 当然qƈ不能从技术上降低正规表达式的复杂性,但可以它们更容易阅诅R?/p>
前面曄提到^表示字符串的开_(d)但它q有另外一个含义。当在一l方括号里用^是,它表C“非”或“排除”的意思,常常用来剔除某个字符。还用前面的例子Q我们要求第一个字W不能是数字Q?/p>
[^\\\/\^] //除了(\)(/)(^)之外的所有字W?
[^\"\'] //除了双引?")和单引号(')之外的所有字W?
PHP的正规表辑ּ有一些内|的通用字符,列表如下Q?/p>
[[:alpha:]] M字母
[[:digit:]] M数字
[[:alnum:]] M字母和数?
[[:space:]] M白字W?
[[:upper:]] M大写字母
[[:lower:]] M写字母
[[:punct:]] M标点W号
[[:xdigit:]] M16q制的数字,相当于[0-9a-fA-F]
到现在ؓ(f)止,你已l知道如何去匚w一个字母或数字Q但更多的情况下Q可能要匚w一个单词或一l数字。一个单词有若干个字母组成,一l数字有若干个单数组成。跟在字W或字符后面的花括?{})用来定前面的内容的重复出现的次数?
^[a-zA-Z_]$ 所有的字母和下划线
^[[:alpha:]]{3}$ 所有的3个字母的单词
^a$ 字母a
^a{4}$ aaaa
^a{2,4}$ aa,aaa或aaaa
^a{1,3}$ a,aa或aaa
^a{2,}$ 包含多于两个a的字W串
^a{2,} 如:(x)aardvark和aaabQ但apple不行
a{2,} 如:(x)baad和aaaQ但Nantucket不行
\t{2} 两个制表W?
.{2} 所有的两个字符
^[0-9]{1,}$ //所有的正数
^\-{0,1}[0-9]{1,}$ //所有的整数
^\-{0,1}[0-9]{0,}\.{0,1}[0-9]{0,}$ //所有的数
Ҏ(gu)字符"?"与{0,1}是相{的Q它们都代表着Q?个或1个前面的内容”或“前面的内容是可选的”。所以刚才的例子可以化ؓ(f)Q?/p>
^[0-9]+$ //所有的正数
^\-?[0-9]+$ //所有的整数
^\-?[0-9]*\.?[0-9]*$ //所有的数