- 論壇徽章:
- 0
|
本帖最后由 justu78 于 2013-09-28 21:43 編輯
我想匹配一個字符串中的類似“......a = (3) b =‘2' c="5"........ ”的定義,做循環(huán)處理,每次抓出象a = ((3)) 或者b = '2' 或者 c="5"的合法數據定義部分,而且還要能避開a=((2) 或者b=3'這些非法的,規(guī)則是:數字兩邊的定界符號可以是括號,單引號或者雙引號,要求左邊和右邊的括號個數要匹配,可以沒有,也可以大于1個。單引號或者雙引號左右最多只能一個,字符串的最后可以有\(zhòng)\作為下一行的連續(xù)符,等號兩邊可以有若干空格,簡單來說就是找到合法的參數賦值部分,現在只是簡單舉例數字是整數,其他類型的數據我自己可以搞定模式匹配,最后只剩下不合法或者其他的怪異部分,我做的測試代碼如下:
#!/bin/sh
eval 'exec perl -S -x -w $0 ${1+"$@"}'
#!perl
$\="\n";
$,=" ";
$str=' tx = (4) ad="6" xyz =4)) \\';
while($str=~/^\s*(\w+\s*=\s*('|"|\(*)?\s*\d+\s*(??{if($2){if($2=~m#\(#){'\)'x length $2}else{"$2"}}}))(\s+|\s*(\\\\)?\s*$)/){
print "$1";
$str=~s/\Q$1//;
}
print "final $str";
運行結果失敗,perl提示模式匹配中有變量未賦值。我的模式中利用了正則表達式的擴展用法(大駱駝書中看來的),但是使用起來不行,
我喜歡看到最后的結果是 " xyz =4)) \\" 但是perl 無法完成
請高手指點一下,謝謝 |
|