2014-11-08 52 views
0

我必須使用乳膠以後的字符串是一個字符串...大致PHP簡單的regex搜索和替換和洗牌子

$string = "\\sin\\left(x\\right)^{2}"; 

其中罪也可能是餘弦,正切,秒,對數,等等。 指數也可以是任意整數,浮點數或變量,參數可以是任何東西..

我想正則表達式函數把它變成

$string = "\\sin^{2}\\left(x\\right)"; 

以上屬LLY

generalstring = "f(t)^{n}"; 

要變成"f^{n}(t)"; 我的道歉提前,我有一種感覺,這應該是非常容易做到的,我剛學這個。

哦,我也想限制這隻字符串trig函數日誌和其他一些功能打印不正確的地方。

回答

1

請嘗試以下代碼:

$string = preg_replace('/\\\\(\w+)\\\\left\\((.+?)\\\\right\\)\\^\\{([^}]+)\\}/','\\\\$1^{$3}\left($2\right)',$string); 

對於我來說,輸出是:

print "$string\n"; 

\sin^{2}\left(x\right) 

另一項測試:

$string = "\\cos\\left(3x\\right)^{2.6}"; 

輸出:

\cos^{2.6}\left(3x\right) 

它還爲mul工作tiple功能,因爲preg_replace默認爲global

$string = "\\sin\\left(x\\right)^{3}\\cos\\left(y\\right)^{2}"; 

\sin^{3}\left(x\right)\cos^{2}\left(y\right) 

編輯:請注意修正後的表達式。

+0

非常好!非常感謝你的幫助..正是我在找什麼.. – userX 2014-11-08 22:38:28

+0

不客氣。 – Nemesis 2014-11-08 22:42:29

+0

對不起@Nemesis這種情況下,字符串包含多個這樣的函數,如$ string =「\\ sin \\ left(x \ right)^ 3 \\ cos \\ left(y \ right)^ 2」 ;有沒有簡單的方法來解決這個問題? – userX 2014-11-08 23:12:25

0

(\\{2}sin|cos|tan|sec|log)([^^]*)(\^\{[^}]*\}) 

看到如何正則表達式匹配的正則表達式http://regex101.com/r/iW4pZ3/1

替換字符串是\\1\\3\\2

preg_replace("/(\\\\{2}sin|cos|tan|sec|log)([^^]*)(\\^\\{[^}]*\\})/","\\1\\3\\2","\\\\sin\\\\left(x\\\\right)^{2}"); 

將產生的輸出作爲

\\sin^{2}\\left(x\\right) 
+0

是不是錯誤? – nu11p01n73R 2014-11-08 21:22:08

+0

我不知道我沒有downvote它我欣賞你的幫助..但是我想$ string =「\\ sin \\ left(x \\ right)^ {2}」; echo preg_replace(「/(\\\\ {2} sin | cos | tan | sec | log)([^^] *)(\\^\\ {[^}] * \\})/」 , 「\ 1 \ 3 \ 2」,$字符串);並輸出相同的字符串作爲初始字符串..也許我做錯了什麼.. – userX 2014-11-08 21:36:22

+0

它工作在regex101鏈接,但不是在我的機器..我必須有一些語法錯誤或這樣的.. – userX 2014-11-08 21:42:01