今天一个朋友发来一段字符串,要用正则表达来解析,尼玛,我朋友是搞java的,虽然我以前也搞Java,但是好久不搞了,但是对于正则表达式而言,解析的规则是一样的。
字符串为: oaMail/v1.6.4[164][HTC One S](android;4.4.1;Caixun_Beta;admin@oatest.cn;1)
要求:按照这个格式来解析
我好久没弄Java只要用数据库的方式来解决这个问题
SELECT regexp_substr('oaMail/v1.6.4[164][HTC One S](android;4.4.1;Caixun_Beta;admin@oatest.cn;1)',
'.+[/].+[[].+[]][[].+[]][(].+[;].+[;].+[;].+[;].+[)]') FROM dual;
注:这个在数据时完全可行的,单朋友说,在Java中不行,虽然好久不搞,但是还是会,谢了一个简答的程序测试了下,不行的原因是Java用匹配的时候,要注意转义,所以在Java中用时要注意这点。
对已正则表达式oralce的用法下面总结下:
oracle 正则表达式主要应用在这四个函数下:
regexp_substr(string,pattern,positon,occurrence,modifer) 其他一样 截取
regexp_like() 和sql中like差不多
regexp_replace() 替换
regexp_instr() 和instr相识
string 需要处理字符串
pattern 正则表达式
positon 起始位置
occurrence 匹配第几组
modifer 模式('i'不区分大小写进行检索;'c'区分大小写进行检索。默认为'c'。)
相比其他正则匹配,Oracle正则表达的函数,可以匹配第几个
SQL> SELECT regexp_substr('(M71-M72)/M72','\w+',1,1),regexp_substr('(M71-M72)/M72','\w+',1,2) FROM dual;
REGEXP_SUBSTR('(M71-M72)/M72', REGEXP_SUBSTR('(M71-M72)/M72',
------------------------------ ------------------------------
M71 M72
常用的正则表达式相关知识,在Oracle中有一些特许写法,但是我认为这些就足够了,没必要记那么多
元字符
|
描述
|
\
|
将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,“\\n”匹配一个换行符。“\n”匹配字符"n"。序列“\\”匹配“\”而“\(”则匹配“(”。
|
^
|
匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配“\n”或“\r”之后的位置。
|
$
|
匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,$也匹配“\n”或“\r”之前的位置。
|
*
|
匹配前面的子表达式零次或多次。例如,zo*能匹配“z”以及“zoo”。*等价于{0,}。
|
+
|
匹配前面的子表达式一次或多次。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。
|
?
|
匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“does”或“does”中的“do”。?等价于{0,1}。
|
{n}
|
n是一个非负整数。匹配确定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o。
|
{n,}
|
n是一个非负整数。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。“o{1,}”等价于“o+”。“o{0,}”则等价于“o*”。
|
{n,m}
|
m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}”将匹配“fooooood”中的前三个o。“o{0,1}”等价于“o?”。请注意在逗号和两个数之间不能有空格。
|
?
|
当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串“oooo”&#x
|