2. 娣誨姞鎵╁睍鐐癸細org.eclipse.core.resources.natures錛岃緗甤lass灞炴€т負鎴戜滑鐨刵ature
3. 鍦ㄦ柊寤哄伐紼嬬殑鍚戝涓坊鍔犳垜浠殑nature錛屾坊鍔犳柟娉曚負錛?/p>
2. EMF鐢熸垚鐨勬柟娉曢兘甯︽湁“@generated”鏍囩銆?/span>EMF閲嶆柊鐢熸垚浠g爜鏃朵笉浼氳鐩栫敤鎴鋒坊鍔犵殑鏂規(guī)硶錛堜笉甯︽湁@generated錛夈€?/span>
3. 鍏充簬URI錛?/span>Uniform Resource Identifier錛?/span>
鍦?/span>EMF 涓槸閫氳繃URI鏉ユ爣璇?/span>package鐨勶紝騫朵笖閫氳繃URI鏉ュ敮涓€鐨勭‘瀹?/span>resources銆?/span>URI鍖呮嫭涓変釜閮ㄥ垎錛?/span>a scheme, a scheme-specific part鍜?/span>an optional fragment銆?/span>scheme涓昏鍐沖畾浜嗚闂?/span>
璧勬簮鐨勫崗璁紱姣斿錛?/span>Platform:/resource/……涓殑platform銆?/span>scheme-specific part鍖呭惈涓€浜?/span>authority, device鍜屼竴浜?/span>segments錛屽file:/c:/dir1/dir2/myfile.xml錛?/span>file鏄崗璁紝娌℃湁authority錛?/span>c:鏄?/span>device,鍓╀笅鐨?/span>3涓槸segments銆?/span>URI fragment 鏍囪瘑浜?/span>resource鍐呴儴鐨勬煇涓叿浣撶殑鍐呭銆傚錛?/span>file:/c:/dir1/dir2/myfile.xml#loc涓殑#loc銆?/span> EMF閫氳繃甯︽湁fragment鐨?/span>URI鏉ヨ闂祫婧愪腑鐨?/span>EObjects銆?/span>
4. 鍏充簬URIConverter
URIConverter鐨勪綔鐢ㄦ槸normalize涓€涓緭鍏?/span>URI錛屼嬌涔嬫垚涓轟竴涓疄闄呯殑閽堝鏌愪釜resource鐨?/span>URI銆傚畠鍙互鎶?/span>namespace URIs錛堟瘮濡傦細http:///com/example/epo2.ecore錛夋槧灝勫埌鐗╃悊鏂囦歡鐨?/span>URIs, 鎴栬€呴噸瀹氬悜鏃х殑錛堟垨鍒悕錛夌殑URI鍙傝€冨埌涓€涓叿浣撶殑瀹為檯鐨?/span>location銆備竴涓?/span>URIConverter緇存姢涓€涓?/span>URI鍒?/span>URI鐨勬槧灝勯泦鍚堛€傛瘮濡傦紝鎶婁竴涓懡鍚嶇┖闂?/span>URI鏄犲皠鍒扮墿鐞嗘枃浠訛細
URIConverter converter = new URIConverterImpl();
URI uri1 = URI.createURI("http:///somemodel.ecore");
URI uri2 =URI.createURI("platform:/resource/project/somemodel.ecore");
converter.getURIMap().put(uri1, uri2);
鍦ㄥ涓嬮潰浠g爜錛?/span>
URI normalized = converter.normalize(uri1);
System.out.println(normalized);
鎵撳嵃鐨勭粨鏋滄槸錛?/span>platform:/resource/project/somemodel.ecore
URIConverter.normalize()鏂規(guī)硶鍙槸綆€鍗曠殑閫氳繃鏄犲皠鐨?/span>map鎶?/span>key鏇挎崲鎴愪簡鐩稿簲鐨?/span>value銆?/span>
URIConverter鐨勬渶鍘熷鏄簲鐢ㄥ湪resource sets錛岀敤鏉ュ畾浣?/span>resources.
5. 鍏充簬Resource鍜?/span>ResourceSet
Resource 琛ㄧず涓€涓寔涔呭寲鐨?/span>EOjbects鐨勫鍣紱ResourceSet琛ㄧず涓€緇?/span>Resource鐨勯泦鍚堬紝闆嗗悎涓殑Resource鍚屾椂鍒涘緩鎴栧姞杞姐€?/span>Resource涓瘮杈冮噸瑕佺殑灝辨槸save鍜?/span>load鏂規(guī)硶錛岃繕鏈夐€氳繃URI fragments璁塊棶璧勬簮涓殑Object鐨勬満鍒訛紝濡傦細
Resource resource =…
Item item = (Item)resource.getEObject("http://@orders.0/@items.2");
Item item =…
String fragment = resource.getURIFragment(item);
涓婇潰浠g爜涓殑涓や釜鏂規(guī)硶錛?/span>getEObject閫氳繃甯︽湁fregment鐨?/span>URI鑾峰緱涓€涓?/span>EObject錛屼笌涔嬬浉鍙嶇殑鏂規(guī)硶getURIFragment()閫氳繃EObject鑾峰緱鐩稿簲鐨?/span>fragment path銆?/span>
ResourceSet涓湁浜涢噸瑕佺殑鏂規(guī)硶錛?/span>
createResource()鍒涘緩涓€涓┖鐨?/span>Resource錛?/span>
getResource()閫氳繃resource鐨?/span>URI鏉ュ垱寤?/span>Resource錛?/span>
getEObject()錛岄€氳繃URI涓殑fregment鏉ヨ幏寰楀叿浣撶殑EObject瀵硅薄銆?/span>
6. 鍏充簬Resource.Factory
鐢ㄦ潵鍒涘緩Resource錛?/span>resource factory 瑕佹敞鍐屽埌Registry瀹炰緥涓€備竴涓?/span>factory 鍙互閫氳繃澶氱鏂瑰紡鐨?/span>URIs鏉ユ敞鍐岋紝鍖呮嫭URI scheme鎴栬€?/span>URI鐨?/span>extension銆傚湪鎻掍歡鏂瑰紡鐨勫簲鐢ㄤ腑錛岄€氳繃鎵╁睍鐐圭殑鏂瑰紡鍦ㄦ彃浠跺姞杞界殑鏃跺€欐敞鍐?/span>descriptor銆備笅闈㈡槸Resource鐨勬簮浠g爜
public interface Resource extends Notifier
{
interface Factory
{
Resource createResource(URI uri);
interface Descriptor
{
Factory createFactory();
}
interface Registry
{
Factory getFactory(URI uri);
Map getProtocolToFactoryMap();
String DEFAULT_EXTENSION = "*";
Map getExtensionToFactoryMap();
Registry INSTANCE = new ResourceFactoryRegistryImpl
();
}
}
}
涓嬮潰鏄?/span>Registry涓殑getFactory()鏂規(guī)硶鐨勭畻娉曪紙寮曠敤鍘熸枃錛夛細
1. Check for a factory in the protocolToFactoryMap, using
the scheme of the URI.
2. If nothing was found, check the extensionToFactoryMap
using the file extension of the URI.
3. If still nothing was found, check the
extensionToFactoryMap using the DEFAULT_EXTENSION
(that is, the wildcard character "*").
4. If no extension match was found, call the
delegatedGetFactory() method. This allows you to supply
your own factory registry, with its own lookup
criteria.
5. If a descriptor was found, instead of an actual
factory, call the createFactory() method on the
descriptor to create the factory.
6. Finally, return the factory if one was found, or null.
tip錛?/span>emf緙虹渷鐨勫簭鍒楀寲鏂瑰紡鏄?/span>XMI銆傚洜姝わ紝濡傛灉娌℃湁鎵懼埌鐩稿簲娉ㄥ唽鐨?/span>factory緙虹渷鐨勫氨浼氳繑鍥炰互*娉ㄥ唽鐨勭己鐪佺殑factory錛岃繖涓?/span>factory鏄拡瀵?/span>XMI鐨?/span>factory錛屽嵆XMIResourceFactoryImpl銆傚錛屽浜?/span>XMIResourceFactoryImpl鐨勬墿灞曠偣澹版槑:
<extension point = "org.eclipse.emf.ecore.extension_parser">
<parser type="*" class="org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl"/>
</extension>
褰撻潪鎻掍歡搴旂敤鐨勬椂鍊欙紝鍙互閫氳繃鎵嬪伐鐨勬柟寮忔潵娉ㄥ唽factory錛屽錛?/span>
Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put
("*", new XMIResourceFactoryImpl());
7. Resource閫氳繃涓ょ鏂瑰紡瀹炵幇XML鍜?/span>XMI銆?/span>
1) XML
瀹炵幇Resource瀛樺偍鐨勯噸瑕佹柟娉曟槸save, 鍙湁鍦ㄦ柟娉?/span>eIsSet()榪斿洖true鏃訛紝鐩稿叧鐨勫睘鎬у拰寮曠敤鎵嶄細琚簭鍒楀寲鍒?/span>xml涓€傚浜庡瓨鍌ㄧ殑xml鏂囦歡鐨勬牸寮忓彲浠ラ€氳繃璁劇疆OPTION_XML_MAP灞炴€ф潵瀹屾垚錛屽涓嬮潰鍘熸枃錛?/span>
There are several reasons why you might want to use OPTION_XML_MAP when saving a resource:
1. You want to save your data so that it conforms to a particular XML Schema.
2. You have changed your model, and you want the resource to produce XML documents that will work with the old version of the model.
3. You want to design your own XML format without changing your model.
2) XMI
XMI鍜?/span>XML鍩烘湰鐩稿悓錛?/span>XMIResourceImpl灝辨槸
XMLResourceImpl鐨勭畝鍗曠戶鎵匡紝鍙槸鍦ㄥ紩鐢?/span>objects鏃朵嬌鐢?/span>XMI IDs
Provides涓垽鏂坊鍔?/span>Decorator鐨勬潯浠躲€傛渶鍚庡氨瑕佹敞鍐屾垜浠殑Provider浜嗐€傛坊鍔犳墿灞曠偣錛?/span>
org.eclipse.gmf.runtime.diagram.ui.decorator.providers錛屽皢decoration provider璁炬垚鎴戜滑鐨?/span>Provider錛岃嚦姝ゅぇ鍔熼€犳垚錛?/span>JScript | VBScript | 鍖歸厤 |
---|---|---|
/^\[ \t]*$/ | "^\[ \t]*$" | 鍖歸厤涓€涓┖鐧借銆?/td> |
/\d{2}-\d{5}/ | "\d{2}-\d{5}" | 楠岃瘉涓€涓狪D 鍙風爜鏄惁鐢變竴涓?浣嶆暟瀛楋紝涓€涓繛瀛楃浠ュ強涓€涓?浣嶆暟瀛楃粍鎴愩€?/td> |
/<(.*)>.*<\/\1>/ | "<(.*)>.*<\/\1>" | 鍖歸厤涓€涓?HTML 鏍囪銆?/td> |
瀛楃 | 鎻忚堪 |
---|---|
\ | 灝嗕笅涓€涓瓧絎︽爣璁頒負涓€涓壒孌婂瓧絎︺€佹垨涓€涓師涔夊瓧絎︺€佹垨涓€涓?鍚戝悗寮曠敤銆佹垨涓€涓叓榪涘埗杞箟絎︺€備緥濡傦紝'n' 鍖歸厤瀛楃 "n"銆?\n' 鍖歸厤涓€涓崲琛岀銆傚簭鍒?'\\' 鍖歸厤 "\" 鑰?"\(" 鍒欏尮閰?"("銆?/td> |
^ | 鍖歸厤杈撳叆瀛楃涓茬殑寮€濮嬩綅緗€傚鏋滆緗簡 RegExp 瀵硅薄鐨?Multiline 灞炴€э紝^ 涔熷尮閰?'\n' 鎴?'\r' 涔嬪悗鐨勪綅緗€?/td> |
$ | 鍖歸厤杈撳叆瀛楃涓茬殑緇撴潫浣嶇疆銆傚鏋滆緗簡RegExp 瀵硅薄鐨?Multiline 灞炴€э紝$ 涔熷尮閰?'\n' 鎴?'\r' 涔嬪墠鐨勪綅緗€?/td> |
* | 鍖歸厤鍓嶉潰鐨勫瓙琛ㄨ揪寮忛浂嬈℃垨澶氭銆備緥濡傦紝zo* 鑳藉尮閰?"z" 浠ュ強 "zoo"銆? 絳変環(huán)浜巤0,}銆?/td> |
+ | 鍖歸厤鍓嶉潰鐨勫瓙琛ㄨ揪寮忎竴嬈℃垨澶氭銆備緥濡傦紝'zo+' 鑳藉尮閰?"zo" 浠ュ強 "zoo"錛屼絾涓嶈兘鍖歸厤 "z"銆? 絳変環(huán)浜?{1,}銆?/td> |
? | 鍖歸厤鍓嶉潰鐨勫瓙琛ㄨ揪寮忛浂嬈℃垨涓€嬈°€備緥濡傦紝"do(es)?" 鍙互鍖歸厤 "do" 鎴?"does" 涓殑"do" 銆? 絳変環(huán)浜?{0,1}銆?/td> |
{n} | n 鏄竴涓潪璐熸暣鏁般€傚尮閰嶇‘瀹氱殑 n 嬈°€備緥濡傦紝'o{2}' 涓嶈兘鍖歸厤 "Bob" 涓殑 'o'錛屼絾鏄兘鍖歸厤 "food" 涓殑涓や釜 o銆?/td> |
{n,} | n 鏄竴涓潪璐熸暣鏁般€傝嚦灝戝尮閰?em>n 嬈°€備緥濡傦紝'o{2,}' 涓嶈兘鍖歸厤 "Bob" 涓殑 'o'錛屼絾鑳藉尮閰?"foooood" 涓殑鎵€鏈?o銆?o{1,}' 絳変環(huán)浜?'o+'銆?o{0,}' 鍒欑瓑浠蜂簬 'o*'銆?/td> |
{n,m} | m 鍜?n 鍧囦負闈炶礋鏁存暟錛屽叾涓?em>n <= m銆傛渶灝戝尮閰?n 嬈′笖鏈€澶氬尮閰?m 嬈°€備緥濡傦紝"o{1,3}" 灝嗗尮閰?"fooooood" 涓殑鍓嶄笁涓?o銆?o{0,1}' 絳変環(huán)浜?'o?'銆傝娉ㄦ剰鍦ㄩ€楀彿鍜屼袱涓暟涔嬮棿涓嶈兘鏈夌┖鏍箋€?/td> |
? | 褰撹瀛楃绱ц窡鍦ㄤ換浣曚竴涓叾浠栭檺鍒剁 (*, +, ?, {n}, {n,}, {n,m}) 鍚庨潰鏃訛紝鍖歸厤妯″紡鏄潪璐┆鐨勩€傞潪璐┆妯″紡灝藉彲鑳藉皯鐨勫尮閰嶆墍鎼滅儲鐨勫瓧絎︿覆錛岃€岄粯璁ょ殑璐┆妯″紡鍒欏敖鍙兘澶氱殑鍖歸厤鎵€鎼滅儲鐨勫瓧絎︿覆銆備緥濡傦紝瀵逛簬瀛楃涓?"oooo"錛?o+?' 灝嗗尮閰嶅崟涓?"o"錛岃€?'o+' 灝嗗尮閰嶆墍鏈?'o'銆?/td> |
. | 鍖歸厤闄?"\n" 涔嬪鐨勪換浣曞崟涓瓧絎︺€傝鍖歸厤鍖呮嫭 '\n' 鍦ㄥ唴鐨勪換浣曞瓧絎︼紝璇蜂嬌鐢ㄨ薄 '[.\n]' 鐨勬ā寮忋€?/td> |
(pattern) | 鍖歸厤 pattern 騫惰幏鍙栬繖涓€鍖歸厤銆傛墍鑾峰彇鐨勫尮閰嶅彲浠ヤ粠浜х敓鐨?Matches 闆嗗悎寰楀埌錛屽湪VBScript 涓嬌鐢?SubMatches 闆嗗悎錛屽湪JScript 涓垯浣跨敤 $0…$9 灞炴€с€傝鍖歸厤鍦嗘嫭鍙峰瓧絎︼紝璇蜂嬌鐢?'\(' 鎴?'\)'銆?/td> |
(?:pattern) | 鍖歸厤 pattern 浣嗕笉鑾峰彇鍖歸厤緇撴灉錛屼篃灝辨槸璇磋繖鏄竴涓潪鑾峰彇鍖歸厤錛屼笉榪涜瀛樺偍渚涗互鍚庝嬌鐢ㄣ€傝繖鍦ㄤ嬌鐢?"鎴? 瀛楃 (|) 鏉ョ粍鍚堜竴涓ā寮忕殑鍚勪釜閮ㄥ垎鏄緢鏈夌敤銆備緥濡傦紝 'industr(?:y|ies) 灝辨槸涓€涓瘮 'industry|industries' 鏇寸畝鐣ョ殑琛ㄨ揪寮忋€?/td> |
(?=pattern) | 姝e悜棰勬煡錛屽湪浠諱綍鍖歸厤 pattern 鐨勫瓧絎︿覆寮€濮嬪鍖歸厤鏌ユ壘瀛楃涓層€傝繖鏄竴涓潪鑾峰彇鍖歸厤錛屼篃灝辨槸璇達紝璇ュ尮閰嶄笉闇€瑕佽幏鍙栦緵浠ュ悗浣跨敤銆備緥濡傦紝'Windows (?=95|98|NT|2000)' 鑳藉尮閰?"Windows 2000" 涓殑 "Windows" 錛屼絾涓嶈兘鍖歸厤 "Windows 3.1" 涓殑 "Windows"銆傞鏌ヤ笉娑堣€楀瓧絎︼紝涔熷氨鏄錛屽湪涓€涓尮閰嶅彂鐢熷悗錛屽湪鏈€鍚庝竴嬈″尮閰嶄箣鍚庣珛鍗沖紑濮嬩笅涓€嬈″尮閰嶇殑鎼滅儲錛岃€屼笉鏄粠鍖呭惈棰勬煡鐨勫瓧絎︿箣鍚庡紑濮嬨€?/td> |
(?!pattern) | 璐熷悜棰勬煡錛屽湪浠諱綍涓嶅尮閰?pattern 鐨勫瓧絎︿覆寮€濮嬪鍖歸厤鏌ユ壘瀛楃涓層€傝繖鏄竴涓潪鑾峰彇鍖歸厤錛屼篃灝辨槸璇達紝璇ュ尮閰嶄笉闇€瑕佽幏鍙栦緵浠ュ悗浣跨敤銆備緥濡?Windows (?!95|98|NT|2000)' 鑳藉尮閰?"Windows 3.1" 涓殑 "Windows"錛屼絾涓嶈兘鍖歸厤 "Windows 2000" 涓殑 "Windows"銆傞鏌ヤ笉娑堣€楀瓧絎︼紝涔熷氨鏄錛屽湪涓€涓尮閰嶅彂鐢熷悗錛屽湪鏈€鍚庝竴嬈″尮閰嶄箣鍚庣珛鍗沖紑濮嬩笅涓€嬈″尮閰嶇殑鎼滅儲錛岃€屼笉鏄粠鍖呭惈棰勬煡鐨勫瓧絎︿箣鍚庡紑濮? |
x|y | 鍖歸厤 x 鎴?y銆備緥濡傦紝'z|food' 鑳藉尮閰?"z" 鎴?"food"銆?(z|f)ood' 鍒欏尮閰?"zood" 鎴?"food"銆?/td> |
[xyz] | 瀛楃闆嗗悎銆傚尮閰嶆墍鍖呭惈鐨勪換鎰忎竴涓瓧絎︺€備緥濡傦紝 '[abc]' 鍙互鍖歸厤 "plain" 涓殑 'a'銆?/td> |
[^xyz] | 璐熷€煎瓧絎﹂泦鍚堛€傚尮閰嶆湭鍖呭惈鐨勪換鎰忓瓧絎︺€備緥濡傦紝 '[^abc]' 鍙互鍖歸厤 "plain" 涓殑'p'銆?/td> |
[a-z] | 瀛楃鑼冨洿銆傚尮閰嶆寚瀹氳寖鍥村唴鐨勪換鎰忓瓧絎︺€備緥濡傦紝'[a-z]' 鍙互鍖歸厤 'a' 鍒?'z' 鑼冨洿鍐呯殑浠繪剰灝忓啓瀛楁瘝瀛楃銆?/td> |
[^a-z] | 璐熷€煎瓧絎﹁寖鍥淬€傚尮閰嶄換浣曚笉鍦ㄦ寚瀹氳寖鍥村唴鐨勪換鎰忓瓧絎︺€備緥濡傦紝'[^a-z]' 鍙互鍖歸厤浠諱綍涓嶅湪 'a' 鍒?'z' 鑼冨洿鍐呯殑浠繪剰瀛楃銆?/td> |
\b | 鍖歸厤涓€涓崟璇嶈竟鐣岋紝涔熷氨鏄寚鍗曡瘝鍜岀┖鏍奸棿鐨勪綅緗€備緥濡傦紝 'er\b' 鍙互鍖歸厤"never" 涓殑 'er'錛屼絾涓嶈兘鍖歸厤 "verb" 涓殑 'er'銆?/td> |
\B | 鍖歸厤闈炲崟璇嶈竟鐣屻€?er\B' 鑳藉尮閰?"verb" 涓殑 'er'錛屼絾涓嶈兘鍖歸厤 "never" 涓殑 'er'銆?/td> |
\cx | 鍖歸厤鐢?x 鎸囨槑鐨勬帶鍒跺瓧絎︺€備緥濡傦紝 \cM 鍖歸厤涓€涓?Control-M 鎴栧洖杞︾銆?em>x 鐨勫€煎繀欏諱負 A-Z 鎴?a-z 涔嬩竴銆傚惁鍒欙紝灝?c 瑙嗕負涓€涓師涔夌殑 'c' 瀛楃銆?/td> |
\d | 鍖歸厤涓€涓暟瀛楀瓧絎︺€傜瓑浠蜂簬 [0-9]銆?/td> |
\D | 鍖歸厤涓€涓潪鏁板瓧瀛楃銆傜瓑浠蜂簬 [^0-9]銆?/td> |
\f | 鍖歸厤涓€涓崲欏電銆傜瓑浠蜂簬 \x0c 鍜?\cL銆?/td> |
\n | 鍖歸厤涓€涓崲琛岀銆傜瓑浠蜂簬 \x0a 鍜?\cJ銆?/td> |
\r | 鍖歸厤涓€涓洖杞︾銆傜瓑浠蜂簬 \x0d 鍜?\cM銆?/td> |
\s | 鍖歸厤浠諱綍絀虹櫧瀛楃錛屽寘鎷┖鏍箋€佸埗琛ㄧ銆佹崲欏電絳夌瓑銆傜瓑浠蜂簬 [ \f\n\r\t\v]銆?/td> |
\S | 鍖歸厤浠諱綍闈炵┖鐧藉瓧絎︺€傜瓑浠蜂簬 [^ \f\n\r\t\v]銆?/td> |
\t | 鍖歸厤涓€涓埗琛ㄧ銆傜瓑浠蜂簬 \x09 鍜?\cI銆?/td> |
\v | 鍖歸厤涓€涓瀭鐩村埗琛ㄧ銆傜瓑浠蜂簬 \x0b 鍜?\cK銆?/td> |
\w | 鍖歸厤鍖呮嫭涓嬪垝綰跨殑浠諱綍鍗曡瘝瀛楃銆傜瓑浠蜂簬'[A-Za-z0-9_]'銆?/td> |
\W | 鍖歸厤浠諱綍闈炲崟璇嶅瓧絎︺€傜瓑浠蜂簬 '[^A-Za-z0-9_]'銆?/td> |
\xn | 鍖歸厤 n錛屽叾涓?n 涓哄崄鍏繘鍒惰漿涔夊€箋€傚崄鍏繘鍒惰漿涔夊€煎繀欏諱負紜畾鐨勪袱涓暟瀛楅暱銆備緥濡傦紝'\x41' 鍖歸厤 "A"銆?\x041' 鍒欑瓑浠蜂簬 '\x04' & "1"銆傛鍒欒〃杈懼紡涓彲浠ヤ嬌鐢?ASCII 緙栫爜銆? |
\num | 鍖歸厤 num錛屽叾涓?num 鏄竴涓鏁存暟銆傚鎵€鑾峰彇鐨勫尮閰嶇殑寮曠敤銆備緥濡傦紝'(.)\1' 鍖歸厤涓や釜榪炵畫鐨勭浉鍚屽瓧絎︺€?/td> |
\n | 鏍囪瘑涓€涓叓榪涘埗杞箟鍊兼垨涓€涓悜鍚庡紩鐢ㄣ€傚鏋?\n 涔嬪墠鑷沖皯 n 涓幏鍙栫殑瀛愯〃杈懼紡錛屽垯 n 涓哄悜鍚庡紩鐢ㄣ€傚惁鍒欙紝濡傛灉 n 涓哄叓榪涘埗鏁板瓧 (0-7)錛屽垯 n 涓轟竴涓叓榪涘埗杞箟鍊箋€?/td> |
\nm | 鏍囪瘑涓€涓叓榪涘埗杞箟鍊兼垨涓€涓悜鍚庡紩鐢ㄣ€傚鏋?\nm 涔嬪墠鑷沖皯鏈?nm 涓幏寰楀瓙琛ㄨ揪寮忥紝鍒?nm 涓哄悜鍚庡紩鐢ㄣ€傚鏋?\nm 涔嬪墠鑷沖皯鏈?n 涓幏鍙栵紝鍒?n 涓轟竴涓悗璺熸枃瀛?m 鐨勫悜鍚庡紩鐢ㄣ€傚鏋滃墠闈㈢殑鏉′歡閮戒笉婊¤凍錛岃嫢 n 鍜?m 鍧囦負鍏繘鍒舵暟瀛?(0-7)錛屽垯 \nm 灝嗗尮閰嶅叓榪涘埗杞箟鍊?nm銆?/td> |
\nml | 濡傛灉 n 涓哄叓榪涘埗鏁板瓧 (0-3)錛屼笖 m 鍜?l 鍧囦負鍏繘鍒舵暟瀛?(0-7)錛屽垯鍖歸厤鍏繘鍒惰漿涔夊€?nml銆?/em> |
\un | 鍖歸厤 n錛屽叾涓?n 鏄竴涓敤鍥涗釜鍗佸叚榪涘埗鏁板瓧琛ㄧず鐨?Unicode 瀛楃銆備緥濡傦紝 \u00A9 鍖歸厤鐗堟潈絎﹀彿 (©)銆?/td> |
涓嬮潰鐪嬪嚑涓緥瀛愶細
"^The"錛氳〃紺烘墍鏈変互"The"寮€濮嬬殑瀛楃涓詫紙"There"錛?The cat"絳夛級錛?
"of despair$"錛氳〃紺烘墍浠ヤ互"of despair"緇撳熬鐨勫瓧絎︿覆錛?
"^abc$"錛氳〃紺哄紑濮嬪拰緇撳熬閮芥槸"abc"鐨勫瓧絎︿覆鈥斺€斿懙鍛碉紝鍙湁"abc"鑷繁浜嗭紱
"notice"錛氳〃紺轟換浣曞寘鍚?notice"鐨勫瓧絎︿覆銆?
'*'錛?+'鍜??'榪欎笁涓鍙鳳紝琛ㄧず涓€涓垨涓€搴忓垪瀛楃閲嶅鍑虹幇鐨勬鏁般€傚畠浠垎鍒〃紺?#8220;娌℃湁鎴?
鏇村”錛?#8220;涓€嬈℃垨鏇村”榪樻湁“娌℃湁鎴栦竴嬈?#8221;銆備笅闈㈡槸鍑犱釜渚嬪瓙錛?
"ab*"錛氳〃紺轟竴涓瓧絎︿覆鏈変竴涓猘鍚庨潰璺熺潃闆朵釜鎴栬嫢騫蹭釜b銆傦紙"a", "ab", "abbb",……錛夛紱
"ab+"錛氳〃紺轟竴涓瓧絎︿覆鏈変竴涓猘鍚庨潰璺熺潃鑷沖皯涓€涓猙鎴栬€呮洿澶氾紱
"ab?"錛氳〃紺轟竴涓瓧絎︿覆鏈変竴涓猘鍚庨潰璺熺潃闆朵釜鎴栬€呬竴涓猙錛?
"a?b+$"錛氳〃紺哄湪瀛楃涓茬殑鏈熬鏈夐浂涓垨涓€涓猘璺熺潃涓€涓垨鍑犱釜b銆?
涔熷彲浠ヤ嬌鐢ㄨ寖鍥達紝鐢ㄥぇ鎷彿鎷搗錛岀敤浠ヨ〃紺洪噸澶嶆鏁扮殑鑼冨洿銆?
"ab{2}"錛氳〃紺轟竴涓瓧絎︿覆鏈変竴涓猘璺熺潃2涓猙錛?abb"錛夛紱
"ab{2,}"錛氳〃紺轟竴涓瓧絎︿覆鏈変竴涓猘璺熺潃鑷沖皯2涓猙錛?
"ab{3,5}"錛氳〃紺轟竴涓瓧絎︿覆鏈変竴涓猘璺熺潃3鍒?涓猙銆?
璇鋒敞鎰忥紝浣犲繀欏繪寚瀹氳寖鍥寸殑涓嬮檺錛堝錛?{0,2}"鑰屼笉鏄?{,2}"錛夈€傝繕鏈夛紝浣犲彲鑳芥敞鎰忓埌浜嗭紝'*'錛?+'鍜?
'?'鐩稿綋浜?{0,}"錛?{1,}"鍜?{0,1}"銆?
榪樻湁涓€涓?¦'錛岃〃紺?#8220;鎴?#8221;鎿嶄綔錛?
"hi¦hello"錛氳〃紺轟竴涓瓧絎︿覆閲屾湁"hi"鎴栬€?hello"錛?
"(b¦cd)ef"錛氳〃紺?bef"鎴?cdef"錛?
"(a¦b)*c"錛氳〃紺轟竴涓?a""b"娣峰悎鐨勫瓧絎︿覆鍚庨潰璺熶竴涓?c"錛?
'.'鍙互鏇夸唬浠諱綍瀛楃錛?
"a.[0-9]"錛氳〃紺轟竴涓瓧絎︿覆鏈変竴涓?a"鍚庨潰璺熺潃涓€涓換鎰忓瓧絎﹀拰涓€涓暟瀛楋紱
"^.{3}$"錛氳〃紺烘湁浠繪剰涓変釜瀛楃鐨勫瓧絎︿覆錛堥暱搴︿負3涓瓧絎︼級錛?
鏂規(guī)嫭鍙瘋〃紺烘煇浜涘瓧絎﹀厑璁稿湪涓€涓瓧絎︿覆涓殑鏌愪竴鐗瑰畾浣嶇疆鍑虹幇錛?
"[ab]"錛氳〃紺轟竴涓瓧絎︿覆鏈変竴涓?a"鎴?b"錛堢浉褰撲簬"a¦b"錛夛紱
"[a-d]"錛氳〃紺轟竴涓瓧絎︿覆鍖呭惈灝忓啓鐨?a'鍒?d'涓殑涓€涓紙鐩稿綋浜?a¦b¦c¦d"鎴栬€?[abcd]"錛夛紱
"^[a-zA-Z]"錛氳〃紺轟竴涓互瀛楁瘝寮€澶寸殑瀛楃涓詫紱
"[0-9]%"錛氳〃紺轟竴涓櫨鍒嗗彿鍓嶆湁涓€浣嶇殑鏁板瓧錛?
",[a-zA-Z0-9]$"錛氳〃紺轟竴涓瓧絎︿覆浠ヤ竴涓€楀彿鍚庨潰璺熺潃涓€涓瓧姣嶆垨鏁板瓧緇撴潫銆?
浣犱篃鍙互鍦ㄦ柟鎷彿閲岀敤'^'琛ㄧず涓嶅笇鏈涘嚭鐜扮殑瀛楃錛?^'搴斿湪鏂規(guī)嫭鍙烽噷鐨勭涓€浣嶃€傦紙濡傦細"%[^a-zA-Z]%"琛?
紺轟袱涓櫨鍒嗗彿涓笉搴旇鍑虹幇瀛楁瘝錛夈€?
涓轟簡閫愬瓧琛ㄨ揪錛屽繀欏誨湪"^.$()¦*+?{\"榪欎簺瀛楃鍓嶅姞涓婅漿縐誨瓧絎?\'銆?
璇鋒敞鎰忓湪鏂規(guī)嫭鍙蜂腑錛屼笉闇€瑕佽漿涔夊瓧絎︺€?/p>