看板 PHP 關於我們 聯絡資訊
※ 引述《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)
buganini :php跟js一樣 直接拿string裝expression送給eval吃 03/07 00:17
buganini :這是他簡單的地方也是他醜陋的地方 03/07 00:17
KiroKu :成功了耶~真神奇 03/07 00:47
KiroKu :試了一下好像一定要外面加單引號才會成功 03/07 00:54
buganini :不加的話你傳進去的就是$q->{"\\1"}的內容了啊 03/07 01:10
buganini :問題是你應該不會剛好有一個變數叫做\\1吧 03/07 01:10
buganini :php也拿string來裝regex 所以會讓人感覺有點混亂 03/07 01:12
buganini :還有多層的slash= = perl直接把regex當作另一種型態 03/07 01:12
buganini :就不用這樣搞 應該說perl把regex的expression和type 03/07 01:14
buganini :都獨立出來了 所以可以直接上 python的話是有regex 03/07 01:14
buganini :的型態 但是expression(應該說syntax)沒有特化 03/07 01:15
buganini :所以還是沒有perl來的方便 而且他也是一樣用字串的 03/07 01:16
buganini :形式表達 所以沒有比PHP好到哪裡去 我覺得唯一的勝出 03/07 01:17
buganini :是python可以把regex compile起來 就不用像PHP 03/07 01:18
buganini :每次重新parse 03/07 01:18