簡體   English   中英

HTML標記的正則表達式

[英]Regular expression for HTML tags

我正在研究詞法分析器。 我有一個HTML文件。 我想將文件中的每個字母轉換成HTML標簽中寫入的大寫字母。 例:

<html>
    <body>
       StackOverFlow
    </body>
</html>

這將轉換為以下內容。

<html>
    <body>
       STACKOVERFLOW
    </body>
</html>

我只想知道正則表達式將選擇HTML標記中的所有內容並對它們不執行任何操作。

僅考慮<>簡單HTML標記。

使用以下任一正則表達式:

(?<=<)[^<]+(?=>)

說明: (?<=<) - 檢查我們是否在[^<]+之前有一個< (不要消耗)(1個或多個非開括號)(消耗),然后檢查我們是否有> (?=>) (不要消費)。 由於我們僅使用中間部分,因此我們使用p代替<p>作為匹配。

或者,只是為了將括號與標簽匹配:

<[^<]+>

說明: <匹配單個文字< ,然后[^<]+匹配除<和然后單個文字>之外的1個或多個字符。 消耗掉所有字符,因此匹配將類似於<p>

根據輸入/用戶受眾的來源,您可能需要提高容差。 雖然我討厭沒有引號的標簽屬性,但你會遇到這種情況。 您還會在標簽中遇到惰性括號,例如value="4 > 3"

(?<=<)([\w-]+)((?:\s+[\w-]+\s*(?:=\s*(?:[^"'>\s]+|("|').*?\3))?)*)\s*(?=>)

要么

<([\w-]+)((?:\s+[\w-]+\s*(?:=\s*(?:[^"'>\s]+|("|').*?\3))?)*)\s*>

第一個正則表達式的解釋(第二個類似但實際上捕獲括號而不是用外觀觀察它們)。

 (?<=                              # Opens LB
     <                             # Literal <
 )                                 # Closes LB
 (                                 # Opens CG1
     [\w-]+                        # Character class (any of the characters within)
                                     # Token: \w (a-z, A-Z, 0-9, _)
                                     # Any of: -
                                     # + repeats one or more times
 )                                 # Closes CG1
 (                                 # Opens CG2
     (?:                           # Opens NCG
         \s+                       # Token: \s (white space)
         [\w-]+                    # Character class (any of the characters within)
                                     # Token: \w (a-z, A-Z, 0-9, _)
                                     # Any of: -
         \s*                       # Token: \s (white space)
                                     # * repeats zero or more times
         (?:                       # Opens NCG
             =                     # Literal =
             \s*                   # Token: \s (white space)
             (?:                   # Opens NCG
                 [^"'>\s]+         # Negated Character class (excludes the characters within)
                                     # None of: "'>
                                     # Token: \s (white space)
             |                     # Alternation (NCG)
                 (                 # Opens CG3
                     "             # Literal "
                 |                 # Alternation (CG3)
                     '             # Literal '
                 )                 # Closes CG3
                 .*?               # . denotes any single character, except for newline
                                     # * repeats zero or more times
                                     # ? as few times as possible
                 \3                # A backreference to CG3
                                     # This is not a repeat of the match, not the pattern.
                                     # If this is an Octal Escape try padding with 0s like \003.
             )                     # Closes NCG
         )?                        # Closes NCG
                                     # ? repeats zero or one times
     )*                            # Closes NCG
 )                                 # Closes CG2
 \s*                               # Token: \s (white space)
 (?=                               # Opens LA
     >                             # Literal >
 )                                 # Closes LA

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM