马上加入TC
您需要 登录 才可以下载或查看,没有帐号?立即注册  
 
x
 
 本帖最后由 剑仙十号 于 2018-4-20 22:28 编辑  
 
【字符串类】正则表达式第二课。转义字符,圆括号,方括号。 
  
第一节:转义字符\ (也可以写/)。 
在PHP中,\将一个字符标记为特殊字符、或原义字符、或向后引用、或八进制转义符。 
 
例如:在PHP中, 
‘n’ 匹配字母 "n"。 
’\n’ 匹配 换行符。 
‘\\’ 匹配 "\"。 
‘\(’ 则匹配 "("。 
 
tc使用PHP正则表达式。 
tc收集到的字符串,要提交到PHP正则库来处理。 
tc编辑器,有自己的转义字符。而PHP正则,也有自己的转义字符。 
这样在带\的地方,必须多加一个\\。 
 
怎样检验,tc提交的正则字符串是否准确? 
把表达式放在弹窗中,用messagebox()弹窗来显示。messagebox()弹窗 收集到的内容,就是tc向PHP提交的内容。弹窗的内容正确,向PHP提交的内容就正确。 
 
======================================================= 
元字符的匹配。 
. ? + * 都是PHP的元字符。 
 
要匹配 "\" 
PHP的写法 \\ ,tc的写法 \\\\ 
 
在tc编辑器中,\是转义符号。在PHP中,\也是转义符号。这样就有重复。 
tc编辑器,收集到的字符串,必须提交到PHP正则库来处理。 
tc编辑器的作用是收集。在tc编辑器中,\\是收集到一个\。\\\\是收集到两个\。 
所以要匹配到 "\",PHP的写法 \\ ,tc的写法 \\\\ 
 
要匹配 "." 
PHP的写法 \. ,tc的写法 \\. 
 
要匹配 "?" 
PHP的写法 \? ,tc的写法 \\? 
 
要匹配 "+" 
PHP的写法 \+ ,tc的写法 \\+ 
 
匹配 "*" 
PHP的写法 \* ,tc的写法 \\* 
  
PHP中,匹配圆括号字符,用 \( 和 \) 。 
在TC中,匹配圆括号字符,用 \\( 和 \\) 。 
  
======================================================= 
  
第二节:用()表示一个整体,或标记一个子表达式。 
第一讲:表示一个整体的()。 
 
======================================================= 
第二讲:表示一个子表达式的()。例如: 
var 表达式 = "..(qqqq).." 
主表达式是:"..(qqqq).." 
子表达式是:(qqqq) 
. 
子表达式,拥有独立的操作函数。 
正则子表达式匹配() 
正则子表达式替换() 
例子: 
var 源字符串 = "aaqqqqbb" 
var 表达式 = "..(qqqq).." 
var arr=正则表达式匹配(源字符串,表达式,真,真) 
var n = 数组大小(arr) 
if(n > 0) 
for(var j = 0;  j < n;  j++) 
  traceprint(arr[j]) 
end 
end 
//============================ 
var arr子=正则子表达式匹配(源字符串,表达式,真,真) 
var n2 = 数组大小(arr子) 
if(n2 > 0) 
for(var j = 0;  j < n2;  j++) 
  traceprint(arr子[j]) 
end 
end 
对比看出:同一个表达式,正则子表达式函数,只匹配子表达式的内容,替换子表达式的内容。 
  
======================================================= 
  
第三节:表示一个集合的“[ ]”。 
在“[ ]”内输入一个范围,就可以匹配范围内的单个字符。 一个集合,每次只匹配一个字符。 
例子:“[0-9]”可以匹配所有的单个数字,我们就可以用“[0-9]”匹配“a1b2c3”中的“1”、“2”和“3”。 
 
“[a-z]” 匹配单个小写字母, 
“[A-Z]” 匹配单个大写字母。 
如图:b17 
“[a-z]” 用来匹配 单个小写字母的,为什么大写字母也匹配? 
. 
第一课讲过: 
var arr=正则表达式匹配(…, …, 是否_不区分大小写, 是否全局, 是否Unicode码, 是否多行) 
. 
参数3,默认为假,默认区分大小写。 
如果设置为 真 ,则不区分大小写。 
. 
“[a-z]”在无视大小写的情况下,等价于“[A-Z]”,所以我们可以用“[a-z]”,匹配到大写字母。 
例子: 
var 源字符串 = "abcdABCD" 
var 表达式 = "abcd" 
var arr=正则表达式匹配(源字符串,表达式,真,真) 
if(数组大小(arr) > 0) 
for(var j = 0;  j < 数组大小(arr);  j++) 
  traceprint(arr[j]) 
end 
end 
//调试结果:"abcd"  第11行。 
//调试结果:"ABCD"  第11行。 
参数3:是否_不区分大小写, 
设置为真,则不理会表达式的。只要表达式带有a,大A,小a,都匹配过来。 
设置为假,则按表达式的。表达式是大"A",仅匹配大A。表达式是小"a",仅匹配小a。 
  
  
用 [\\x{4e00}-\\x{9fa5}],匹配单个中文。 
\\x 是什么意思? 
在Delphi中,十六进制用 $ 打头。 
在C++中,十六进制用 0x打头。 
在PHP中,十六进制用 \x打头。PHP的\x,就是tc的\\x。 
======================================================= |