亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

是否有一個正則表達式來檢測一個有效的正則表達式?

是否有一個正則表達式來檢測一個有效的正則表達式?

慕容3067478 2019-07-08 14:52:19
是否有一個正則表達式來檢測一個有效的正則表達式?是否可以用另一個正則表達式檢測有效的正則表達式?如果是的話,請給出下面的示例代碼。
查看完整描述

3 回答

?
墨色風雨

TA貢獻1853條經驗 獲得超6個贊

/

^                                             # start of string

(                                             # first group start

  (?:

    (?:[^?+*{}()[\]\\|]+                      # literals and ^, $

     | \\.                                    # escaped characters

     | \[ (?: \^?\\. | \^[^\\] | [^\\^] )     # character classes

          (?: [^\]\\]+ | \\. )* \]

     | \( (?:\?[:=!]|\?<[=!]|\?>)? (?1)?? \)  # parenthesis, with recursive content

     | \(\? (?:R|[+-]?\d+) \)                 # recursive matching

     )

    (?: (?:[?+*]|\{\d+(?:,\d*)?\}) [?+]? )?   # quantifiers

  | \|                                        # alternative

  )*                                          # repeat content

)                                             # end first group

$                                             # end of string

/

這是一個遞歸正則表達式,許多regex引擎不支持它?;赑CRE的機構應該支持它。


沒有空格和注釋:


/^((?:(?:[^?+*{}()[\]\\|]+|\\.|\[(?:\^?\\.|\^[^\\]|[^\\^])(?:[^\]\\]+|\\.)*\]|\((?:\?[:=!]|\?<[=!]|\?>)?(?1)??\)|\(\?(?:R|[+-]?\d+)\))(?:(?:[?+*]|\{\d+(?:,\d*)?\})[?+]?)?|\|)*)$/

NET不直接支持遞歸。()(?1)和(?R))遞歸必須轉換為計算平衡組:


^                                         # start of string

(?:

  (?: [^?+*{}()[\]\\|]+                   # literals and ^, $

   | \\.                                  # escaped characters

   | \[ (?: \^?\\. | \^[^\\] | [^\\^] )   # character classes

        (?: [^\]\\]+ | \\. )* \]

   | \( (?:\?[:=!]

         | \?<[=!]

         | \?>

         | \?<[^\W\d]\w*>

         | \?'[^\W\d]\w*'

         )?                               # opening of group

     (?<N>)                               #   increment counter

   | \)                                   # closing of group

     (?<-N>)                              #   decrement counter

   )

  (?: (?:[?+*]|\{\d+(?:,\d*)?\}) [?+]? )? # quantifiers

| \|                                      # alternative

)*                                        # repeat content

$                                         # end of string

(?(N)(?!))                                # fail if counter is non-zero.

壓實:


^(?:(?:[^?+*{}()[\]\\|]+|\\.|\[(?:\^?\\.|\^[^\\]|[^\\^])(?:[^\]\\]+|\\.)*\]|\((?:\?[:=!]|\?<[=!]|\?>|\?<[^\W\d]\w*>|\?'[^\W\d]\w*')?(?<N>)|\)(?<-N>))(?:(?:[?+*]|\{\d+(?:,\d*)?\})[?+]?)?|\|)*$(?(N)(?!))

分享


查看完整回答
反對 回復 2019-07-08
?
FFIVE

TA貢獻1797條經驗 獲得超6個贊

不太可能。

在一個try..catch或者你的語言所提供的一切。


查看完整回答
反對 回復 2019-07-08
?
慕姐8265434

TA貢獻1813條經驗 獲得超2個贊

如果嚴格地說正則表達式,而不包括一些實際上是上下文無關語法的正則表達式實現,則不會。

正則表達式有一個限制,使得不可能編寫匹配所有和唯一正則表達式的正則表達式。您無法匹配實現,如大括號的配對。Regexes使用了許多這樣的結構,讓我們以[]為例。無論何時有[必須有匹配]。簡單到一個正則表達式“[.*]”。

REXEX之所以不可能,是因為它們可以嵌套。如何編寫與嵌套括號匹配的正則表達式?答案是,沒有無限長的正則表達式是不可能的。您可以通過蠻力匹配任意數量的嵌套父母,但您永遠無法匹配任意長的嵌套括號集。

這種功能通常被稱為計數(您正在計算嵌套的深度)。根據定義,正則表達式不具備計數能力。

編輯:最后寫了一篇關于此的博客文章:正則表達式限制


查看完整回答
反對 回復 2019-07-08
  • 3 回答
  • 0 關注
  • 745 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號