亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

以下內容是關于linux/unix shell 中expr 字符串匹配問題,麻煩大佬指教!

以下內容是關于linux/unix shell 中expr 字符串匹配問題,麻煩大佬指教!

明月笑刀無情 2021-08-31 17:13:52
expr "abcde" : ".*b"結果為2,即匹配.*b這個正則表達式時,正好ab能夠匹配上,其長度為2,所以返回2。但 expr "abcde" : "cde"這里cde也可以理解為一個正則表達式,但為什么返回值是0呢,明明能夠匹配到cde這個串嘛?即echo "abcde" | grep 'cde' 明明 是可以匹配到的么?為什么expr不行?
查看完整描述

2 回答

?
DIEA

TA貢獻1820條經驗 獲得超2個贊

個人認為,就是完全匹配與部分匹配的差別。

grep 只要字符串中有部分能夠與正則匹配即可,并且會輸出匹配的一整行。幫助里這樣講:
grep searches the named input FILEs (or standard input) for lines containing (注意,是containing) a match to the given PATTERN. By default, grep prints the matching lines.

如果你在終端里正確設置了顏色顯示,那么可以看到:
echo "abcde" | grep "cde" 結果輸出 abcde,其中cde是高亮紅色顯示的(只匹配了部分)。
echo "abcde" | grep ".*cde" 結果也是輸出 abcde,其中abcde全是高亮紅色顯示的。
這表示grep是部分匹配的,只要有部分字符串匹配就OK。

expr STRING : REGEXP 則是完整匹配,輸出最后匹配的那個位置(anchor)。幫助里這樣說的:
STRING : REGEXP
anchored pattern match of REGEXP in STRING

規定了:后面必須跟正則表達式,用于格式匹配。
.*b 是正則表達式,可用于匹配任何以b結尾的字符串。
但“cde”如果被用作完全匹配的話,就是必須匹配以c開頭的字符串,顯然匹配不到,因為:前的字符串以a開頭。^_^
如果改為 expr "cdeab" : "cde" ,這樣就可以匹配成功并且返回3。

看看源碼應該能更清楚內部實現方式的區別。我沒看過,因此也不好多說了。以上純屬個人看法,僅供探討。

查看完整回答
反對 回復 2021-09-06
?
呼啦一陣風

TA貢獻1802條經驗 獲得超6個贊

幫助里這樣說的:
STRING : REGEXP
anchored pattern match of REGEXP in STRING

規定了:后面必須跟正則表達式,用于格式匹配。
.*b 是正則表達式,可用于匹配任何以b結尾的字符串。
cde 就是一個固定字符串STRING,不符合要求的格式。當然,這里shell將它作為正則表達式來解釋,就變成匹配以c開頭的字符串,顯然匹配不到,因為:前的字符串以a開頭。^_^
如果改為 expr "cdeab" : "cde"
就可以匹配到并且返回3。
——————————————————————————————————————
匹配方式不同,作用也不同。
grep searches the named input FILEs (or standard input) for lines containing (注意,是containing) a match to the given PATTERN. By default, grep prints the matching lines.

grep 只要字符串中有部分能夠與正則匹配即可,并且會輸出匹配的一整行;
expr STRING : REGEXP 則是完整匹配,輸出最后匹配的那個位置(anchor)。

如果你在終端里正確設置了顏色顯示,那么可以看到:
echo "abcde" | grep "cde" 結果輸出 abcde,其中cde是高亮紅色顯示的(只匹配了部分)。
echo "abcde" | grep ".*cde" 結果也是輸出 abcde,但其中abcde都是高亮紅色顯示的。

看看源碼應該能更清楚內部實現方式的區別。我沒看過,因此也不好多說了。以上純屬個人看法,僅供探討。
很欣賞你這種探究到底的精神。



查看完整回答
反對 回復 2021-09-06
  • 2 回答
  • 0 關注
  • 482 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號