2016-05-29 19 views
0

Ich versuche Parsedowns Markup zu überschreiben, um nur <h2> Überschriften zuzulassen.Regulärer Ausdruck zum Entkommen n # außer 2 #

Welcher Regex würde allen Überschriftenarten außer <h2> entkommen?

#Heading -> \#Heading 
##Heading -> ##Heading 
###Heading -> \###Heading 
####Heading -> \####Heading 
#####Heading -> \#####Heading 
######Heading -> \######Heading 
+0

Danke, warum t war sein Votum als zu breit gewählt? – frosty

+1

Eher https://regex101.com/r/uS6xY8/2 – myf

+0

sollten Sie Ihren Versuch posten .. – rock321987

Antwort

1

können Sie diese Regex verwenden

^(?!##\w)(?=#) 

Regex Demo

Regex Pannen

^  #Start of string 
(?!  #Negative lookahead(it means, whatever is there next do not match it) 
##\w #Assert that its impossible to match two # followed by a word character 
) 
(?=  #Positive lookahead 
#  #check if there is at least one # 
) 

HINWEIS

\w denotes any character from [A-Za-z0-9_]. 
[..] denotes character class. Any character(not string) present in this will be matched. 
+0

Aus welchem ​​Grund auch immer, die Regex ist nicht Arbeiten mit PHP's preg_replace ... das schließt alle anderen Antworten hier ein. 'preg_replace ('/^(?! ## \ w) (? = #)/m', '\\', $ Artikel-> Körper)' – frosty

+0

@frosty siehe ** [hier] (http: // ideone.com/9or1o7)** ..es funktioniert gut – rock321987

+0

@frosty kann '### ...' in der Mitte der Zeichenfolge vorhanden sein? – rock321987

1

Beschreibung

^((?:#|#{3,})[^#]) 

Regular expression visualization

Ersetzen durch:\$1

Dieser reguläre Ausdruck folgendes tun:

  • Spiel ein hash
  • 3 oder mehr Hash

Beispiel

Live Demo

https://regex101.com/r/kE4oK6/1

Beispieltext

#Heading 
##Heading 
###Heading 
####Heading 
#####Heading 
######Heading 

Probe Spiele

\#Heading 
##Heading 
\###Heading 
\####Heading 
\#####Heading 
\######Heading 

Erklärung

NODE      EXPLANATION 
---------------------------------------------------------------------- 
^      the beginning of a "line" 
---------------------------------------------------------------------- 
    (      group and capture to \1: 
---------------------------------------------------------------------- 
    (?:      group, but do not capture: 
---------------------------------------------------------------------- 
     #      '#' 
---------------------------------------------------------------------- 
    |      OR 
---------------------------------------------------------------------- 
     #{3,}     '#' (at least 3 times (matching the 
           most amount possible)) 
---------------------------------------------------------------------- 
    )      end of grouping 
---------------------------------------------------------------------- 
    [^#]      any character except: '#' 
---------------------------------------------------------------------- 
)      end of \1 
---------------------------------------------------------------------- 
1

Verwenden Blick aheads für Überschriften, aber nicht doppelt Hashes:

^(?!##\w)(?=#+)