2012-11-26 23 views
-1

我正在尋找解決方案來查找是否:-char由[和]或不包含。查找是否:-char在[和]之間

我有一種語法,可以使用模板中的相應值定義鍵。語法分解爲:-char來標識鍵,但是:-char也應該在括號內有效。基本上我的示例/案例是這樣的:

:key1[value]:key2[this:value should work too]

我正在尋找一種方法來查找是否:-char在括號內。我已經開始寫出一個程序來解決這個問題,但是在寫作過程中,我腦海中的一個電子脈衝說'regex .. regex'。但我對他們很不熟悉。有人可以幫我嗎?

P.s.如果你壓低了這個問題,至少告訴我你爲什麼認爲這是一個糟糕的問題。在我看來,這是一個我正在尋求幫助的正確問題。

+0

所以你只需要檢查':'在'[]'內部,還是有一些其他的任務呢? – zerkms

+2

':-'或':'char? – diEcho

+2

「但在寫作過程中,我腦海中的一個電子脈衝表示'regex .. regex'。」 ---現在你有2個問題 – zerkms

回答

3

我要告訴你解析這個一般方式:DEMO

:(key\d)+\[([^\]]+)\]

你需要做的是符合使用.*[]之間的一切,所以,而不是你必須告訴正則表達式你想匹配所有不是]所以... [^\]]

你可以看到演示更多的解釋。

+0

很好的答案,更好的解釋。我也可以丟棄一些其他的驗證代碼,因爲這個演示程序完全符合我的要求! +1已接受。 – Ben

1
preg_match('~\[[^\]]*:~', $str) 

這將返回1如果括號內的:字符。正則表達式假定括號始終配對。

+0

感謝您的回答! +1 – Ben

1

要查找是否:-char是[]內就足以把你的正則表達式如下:

preg_match('/\[:-char\]/', $string); 

這將匹配所有 「:-char」 包裹[]。請注意,[]字符是正則表達式模式的一部分,因此應該逃脫。 如果你想找到所有「:-char」,而是看其是否有[]或沒有,那麼你去

preg_match('/(\[)?:-char(\])?/', $string, $var); 

然後在()將被捕獲到$var一切結果。而且從它的結構,你可以判斷它是否被包裹[]或不

爲了更好地理解正則表達式是如何工作的,我建議標準的PHP文件:http://php.net/manual/en/book.pcre.php

+0

也是一個很好的答案。太糟糕了,我只能接受一個答案。 +1,謝謝! – Ben

+0

@BenFransen在發佈到SO之前,最好在文檔中挖掘一下;)這是一個簡單的初學者級別的問題,可以在不詢問這裏的情況下解決,然後你就不會被拒絕投票。只需檢查官方文檔。他們很容易理解。嘗試他們的例子。 – AlexKey

+0

感謝您的回覆。好吧,對我來說正則表達式很多次都讓人困惑,這就是我問這個問題的原因。對於某些人來說,這個問題可能太簡單/一般了,對我而言,這是一個我不清楚的問題,我請求幫助。有時候,我會提供非常(對我來說)簡單問題的答案,但詢問的人可能會覺得困難,或者只是不確定如何解決'問題':) – Ben