2010-05-25 67 views
6

是否可以使用正則表達式來檢測給定的字符串是否爲有效的正則表達式?是否有可能匹配所有有效的正則表達式的正則表達式?

說我有一些字符串,可能是也可能不是一個有效的正則表達式。我想有一個正則表達式匹配那些對應於有效正則表達式的字符串。那可能嗎?或者我是否使用了一些更高級別的語法(即上下文無關語言)來檢測它?如果我使用某些擴展版本的正則表達式(如Perl正則表達式)會影響它嗎?

如果這是可能的,正則表達式匹配正則表達式是什麼?

+0

可能重複是否有一個正則表達式來檢測一個有效的正則表達式?](http://stackoverflow.com/questions/172303/is-there-a-regular-expression-to-detect-a-valid-regular-expression) – outis 2012-03-16 00:36:39

回答

8

不,這是不可能的。這是因爲有效的正則表達式涉及分組,這需要平衡的括號。

平衡分隔符不能用正則表達式匹配;他們必須改爲與context-free grammar匹配。 (該first example與平衡的括號中的那文章的交易。)

+0

好的,那是正常的正則表達式。Perl的正則表達式怎麼樣? – 2010-05-25 17:30:29

+0

@JuhaSyrjälä:實際上,我正在思考Perl正則表達式。正如我已經解釋的,分組圓括號不能與正則表達式匹配。 – 2010-05-25 17:56:17

+0

PCRE和.NET擴展正則表達式以匹配平衡子組。Perl 6使用也啓用它的規則來擴展正則表達式。但是到現在爲止,「正則表達式」的描述不再準確。事實上,今天大多數「正則表達式」所理解的東西已不再是常規的。 – 2010-05-28 11:14:00

0

如果你的問題是「匹配所有有效的正則表達式」,答案是(也許是令人驚訝的)'是'。正則表達式.*匹配所有有效的(和無效的)正則表達式,但對於確定您是否正在查看有效的正則表達式而言是無用的。

然而,因爲這個問題是「符合一切,唯一有效的正則表達式」,答案是(爲DVK和白金天青」說‘不’。

的[