2009-01-27 58 views

回答

6

沒有技術上的原因,它必須是這樣的。

如註釋中所述,底層庫不要求將標誌作爲正則表達式的一部分進行傳遞 - 事實上,擴展必須將這些標誌去掉並作爲單獨的參數傳遞它們。

看起來好像最初的實現者試圖讓它看起來像grep/sed/awk/perl/etc,以便它們對來自這些工具的程序員更加熟悉。

+4

PCRE根本不允許周圍的分隔符。 PHP preg函數在將它們傳遞給PCRE庫之前將它們剝離。 – 2009-01-27 14:24:09

+2

哇,那麼這都是純粹的試圖成爲perl?我一直原諒語法多年,但現在我可以自由地真正討厭它。謝謝! – Cal 2009-01-27 17:19:50

15

分隔符的原因是在模式之後放置標誌。可以將標誌作爲一個單獨的參數傳遞(Java可以這樣做),但這就是Perl最初完成它的方式(以及之前的sed/awk/vi),所以現在它是如何完成的。

不要使用正斜槓:它們太常見了。我個人幾乎總是使用!字符。我幾乎沒有想過那樣。

6

我不知道preg函數的開發者的動機是什麼。我能想到的唯一原因是他們嘗試了一些太難以Perl的方式來做事情。

儘管分隔符允許將標誌與正則表達式一起指定爲一個參數,但將標誌指定爲單獨的參數會更清晰。這就是每個其他正則表達式庫(對於不支持文字正則表達式作爲語言功能的語言)我知道的,包括PHP的preg函數基於的PCRE庫。 preg代碼確實必須經過使用正則表達式從字符串中移除正則表達式分隔符的麻煩,才能將其傳遞給PCRE。

相關問題