2014-02-05 205 views
2

我小的疑難問題有一個正則表達式從PHP轉換爲C#轉換PHP正則表達式C#正則表達式

\[(\[?)(blockquote)(?![\w-])([^\]\/]*(?:\/(?!\])[^\]\/]*)*?)(?:(\/)\]|\](?:([^\[]*+(?:\[(?!\/\2\])[^\[]*+)*+)\[\/\2\])?)(\]?) 

但我有一個問題,當使用至REGx在C#和得到這個錯誤

Match Pattern Error: parsing "[([?)(blockquote)(?![\w-])([^]/](?:/(?!])[^]/])*?)(?:(/)]|](?:([^[]+(?:[(?!/\2])[^[]+)*+)[/\2])?)(]?)" - Nested quantifier +.

請指教。

生成PHP正則表達式

[blockquote] some text... [/blockquote]

在WordPress

function get_shortcode_regex() { 
global $shortcode_tags; 
$tagnames = array_keys($shortcode_tags); 
$tagregexp = join('|', array_map('preg_quote', $tagnames)); 

// WARNING! Do not change this regex without changing do_shortcode_tag() and strip_shortcode_tag() 
// Also, see shortcode_unautop() and shortcode.js. 
return 
     '\\['        // Opening bracket 
    . '(\\[?)'       // 1: Optional second opening bracket for escaping shortcodes: [[tag]] 
    . "($tagregexp)"      // 2: Shortcode name 
    . '(?![\\w-])'      // Not followed by word character or hyphen 
    . '('        // 3: Unroll the loop: Inside the opening shortcode tag 
    .  '[^\\]\\/]*'     // Not a closing bracket or forward slash 
    .  '(?:' 
    .   '\\/(?!\\])'    // A forward slash not followed by a closing bracket 
    .   '[^\\]\\/]*'    // Not a closing bracket or forward slash 
    .  ')*?' 
    . ')' 
    . '(?:' 
    .  '(\\/)'      // 4: Self closing tag ... 
    .  '\\]'       // ... and closing bracket 
    . '|' 
    .  '\\]'       // Closing bracket 
    .  '(?:' 
    .   '('      // 5: Unroll the loop: Optionally, anything between the opening and closing shortcode tags 
    .    '[^\\[]*+'    // Not an opening bracket 
    .    '(?:' 
    .     '\\[(?!\\/\\2\\])' // An opening bracket not followed by the closing shortcode tag 
    .     '[^\\[]*+'   // Not an opening bracket 
    .    ')*+' 
    .   ')' 
    .   '\\[\\/\\2\\]'    // Closing shortcode tag 
    .  ')?' 
    . ')' 
    . '(\\]?)';       // 6: Optional second closing brocket for escaping shortcodes: [[tag]] 

}

回答

1

那麼,根據this答案,.NET不支持posessive量詞。

因此,您需要替換類似[0-9]*+的結構,例如(?>[0-9]*)

相關問題