Re: [請益] preg_replace用法?

看板PHP作者 (霸格尼尼)時間16年前 (2009/03/07 00:15), 編輯推噓2(2013)
留言15則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《KiroKu ()》之銘言: : preg_replace("/%(.*)%/",$q->{"\\1"},$x); : 如果$x包含 %name%就使用$q->name去取代。 : 第二個參數試過"\\1",出來應該是name沒有錯, : 但是$q->{"\\1"}似乎取不出來? : 或是有更好的寫法嘛?因為這樣好像一次也只能作單一取代 : 遇到"%name% %title%"就不行了。 請注意語意.. preg_replace('/A/','B',$s); 會換成B"字串" preg_replace("/%(.*)%/",$q->{"\\1"},$x); 會換成你var_dump($q->{"\\1"})看到的那個字串 被preg處理後的結果 可以猜測$q->{"\\1"}什麼都沒有 preg_replace的第二個參數 是 "字串" 不是expression 你的用途 請用 preg_replace("/%(.*)%/e",'$q->{"\\1"}',$x); 不過用e我不確定會不會有什麼安全問題 如果他都有幫你正確的escape號應該是ok 但我沒注意過 -- 國愛‧主民‧學科‧康健‧道人 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.135.231.23 ※ 編輯: buganini 來自: 220.135.231.23 (03/07 00:16)

03/07 00:17, , 1F
php跟js一樣 直接拿string裝expression送給eval吃
03/07 00:17, 1F

03/07 00:17, , 2F
這是他簡單的地方也是他醜陋的地方
03/07 00:17, 2F

03/07 00:47, , 3F
成功了耶~真神奇
03/07 00:47, 3F

03/07 00:54, , 4F
試了一下好像一定要外面加單引號才會成功
03/07 00:54, 4F

03/07 01:10, , 5F
不加的話你傳進去的就是$q->{"\\1"}的內容了啊
03/07 01:10, 5F

03/07 01:10, , 6F
問題是你應該不會剛好有一個變數叫做\\1吧
03/07 01:10, 6F

03/07 01:12, , 7F
php也拿string來裝regex 所以會讓人感覺有點混亂
03/07 01:12, 7F

03/07 01:12, , 8F
還有多層的slash= = perl直接把regex當作另一種型態
03/07 01:12, 8F

03/07 01:14, , 9F
就不用這樣搞 應該說perl把regex的expression和type
03/07 01:14, 9F

03/07 01:14, , 10F
都獨立出來了 所以可以直接上 python的話是有regex
03/07 01:14, 10F

03/07 01:15, , 11F
的型態 但是expression(應該說syntax)沒有特化
03/07 01:15, 11F

03/07 01:16, , 12F
所以還是沒有perl來的方便 而且他也是一樣用字串的
03/07 01:16, 12F

03/07 01:17, , 13F
形式表達 所以沒有比PHP好到哪裡去 我覺得唯一的勝出
03/07 01:17, 13F

03/07 01:18, , 14F
是python可以把regex compile起來 就不用像PHP
03/07 01:18, 14F

03/07 01:18, , 15F
每次重新parse
03/07 01:18, 15F
文章代碼(AID): #19iKmIkT (PHP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #19iKmIkT (PHP)