Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 在正则表达式中查找模式的首次出现_Html_Regex_Notepad++_Expression - Fatal编程技术网

Html 在正则表达式中查找模式的首次出现

Html 在正则表达式中查找模式的首次出现,html,regex,notepad++,expression,Html,Regex,Notepad++,Expression,我知道这个问题已经被问了一百万次了,所以我想问一个重复的问题,但这让我发疯了。我已经在这方面工作了很长时间,但似乎没有取得任何进展 我有一些html代码,其中包含左右浮动的图像。我需要做的是找到所有浮动的图像,移除浮动,然后将它们包装在一个div中,该div现在以与图像相同的方式浮动 e、 g。 从 到 我在记事本++中使用此代码 发现 取代 问题在于,在包含标记和多个图像的代码块中,我从头到尾突出显示了整个代码块 例如 Lorem ipsum Lorem ipsum Lorem ips

我知道这个问题已经被问了一百万次了,所以我想问一个重复的问题,但这让我发疯了。我已经在这方面工作了很长时间,但似乎没有取得任何进展

我有一些html代码,其中包含左右浮动的图像。我需要做的是找到所有浮动的图像,移除浮动,然后将它们包装在一个div中,该div现在以与图像相同的方式浮动

e、 g。 从

我在记事本++中使用此代码 发现

取代

问题在于,在包含
标记和多个图像的代码块中,我从头到尾突出显示了整个代码块

例如

Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum ipsum Lorem ipsum Lorem ipsum ipsum Lorem ipsum ipsum Lorem ipsum ipsum Lorem ipsum ipsum Lorem ipsum ipsum loem ipsum ipsum ipsum ipsum ipsum ipsum loem ipsum ipsum ipsum ipsum ipsum ipsum ipsum loem ipsum ipsum ipsum ipsum ipsum ipsum loem益智益智益智益智益智益智益智益智益智益智益智益智益智益智益智益智益智益智益智益智益智益智益智益智益智益智益智益智益智益智

学识:益智:益智:益智:益智:益智:益智:益智:益智:益智:益智:益智:益智:益智:益智:益智:益智:益智:益智:益智:益智:益智:益智:益智:益智:益智:益智:益智:益智:益智:益智:益智:益智:益智:益智:益智:益智:益智:益智:益智:益智:益智:益智:益智:益智:益智:益智:益智:益智:益智益普生知识益普生知识益普生知识益普生知识益普生知识益普生知识益普生知识益普生知识益普生知识益普生知识益普生知识益普生知识益普生知识

在notepad++中,这与整个块匹配。你能给我一些建议吗?我快发疯了

亚当

前锋 确保您使用的是最新版本的notepad++,在notepad++v5和之前版本中使用正则表达式的已知问题在v6中已得到纠正

基本的 尽管存在大量边缘情况,正则表达式在处理HTML时有困难,例如:

  • 属性可以在标记中以任意顺序出现
  • 属性值可以看起来像实际属性,例如
  • 属性值可以使用单引号、双引号或无引号

在您的表达式中考虑将您的<代码> .+/COD>更改为<代码> [^ ] +< /代码>。这将防止ReGEX引擎离开引用区域或标签并行进到下一个可能的匹配< /P>

<img src="([^"]+)" border="([0-9]{1})" alt="([^"]*?)" width="([0-9]{2,3})" height="([0-9]{3})" style="float: (right|left);" />

但这不适用于其他边缘情况

复杂的 要绕过这些边缘情况,您可以使用此monster表达式。我在多行中使用了它,并在此处对其进行了注释,以显示正在发生的情况,从而使其更易于理解。但是,在记事本中,您需要删除注释和所有新行

Regex

<img(?=\s|>)
(?=(?:[^>=]|='[^']*'|="[^"]*"|=[^'"][^\s>]*)*?\ssrc=('[^']*'|"[^"]*"|[^'"][^\s>]*)) # find src, capture value including quotes if they exist
(?=(?:[^>=]|='[^']*'|="[^"]*"|=[^'"][^\s>]*)*?\sborder=('[^']*'|"[^"]*"|[^'"][^\s>]*))  # find border, capture value including quotes if they exist
(?=(?:[^>=]|='[^']*'|="[^"]*"|=[^'"][^\s>]*)*?\salt=('[^']*'|"[^"]*"|[^'"][^\s>]*)) # find alt, capture value including quotes if they exist
(?=(?:[^>=]|='[^']*'|="[^"]*"|=[^'"][^\s>]*)*?\swidth=('[^']*'|"[^"]*"|[^'"][^\s>]*))   # find width, capture value including quotes if they exist
(?=(?:[^>=]|='[^']*'|="[^"]*"|=[^'"][^\s>]*)*?\sheight=('[^']*'|"[^"]*"|[^'"][^\s>]*))  # find height, capture value including quotes if they exist
(?=(?:[^>=]|='[^']*'|="[^"]*"|=[^'"][^\s>]*)*?\sstyle="[^"]*(float:\s*(?:right|left)))  # find style, capture value including quotes if they exist
[^>]*>                      # actually capture the string
]*)#查找src,捕获值,包括引号(如果存在)
(?=(?:[^>=]|='[^']*'|=“[^”]*“[^'”][^\s>]*)*?\sborder=(“[^']*'”[^']*“[^']*”)|查找边框,捕获包含引号的值(如果存在)
(?=(?:[^>=]|='[^']*'[^']*“[^”]*”[^'][^\s>]*)*?\salt=(“[^']*”[^']*“[^']*”[^\s>])查找alt值,捕获值,包括引号(如果它们存在的话)
(?=(?:[^>=]|='[^']*'|=“[^”]*“[^”]*”|=[^'][^\s>]*)*?\swidth=(“[^']*”[^']*“[^'][^\s>])查找宽度,捕获值,包括引号(如果存在)
(?=(?:[^>=]|='[^']*'|=“[^”]*“[^”]*”[^\s>]*)*?\sheight=(“[^']*”[^']*“[^']*”[^\s>]*)查找高度,捕获值,包括引号(如果存在)
(?=(?:[^>=]|='[^']*'|=“[^”]*“[^”]*”[^'][^\s>]*)*?\sstyle=“[^”]*(float:\s*(?:right | left))#查找样式,捕获包含引号的值(如果它们存在的话)
[^>]*>#实际捕获字符串
替换为

<div class="imgContainer" style="$6;"><img src=$1 border=$2 alt=$3 width=$4 height=$5 /></div>

这是插入记事本示例的单行表达式。我使用的是记事本++v6.3.3

(2)除除上述代码外,其他(代码)中的(代码)除除除除上述代码外,其他(代码)除除除除除除除上述代码外,其余(代码)除除除除除除除除除除除除除除除除除除除除除除除上述代码外,其他(代码)))中))))))除(以下以下以下)除除除除(以下以下以下以下以下以下以下(:(:(::::::::::::::::::::::::::::::)除除除除除除除除除除除除除除除除除除除除除除除除除除除上述上述上述上述上述现场现场现场现场现场现场现场现场现场现场各州各州各州各州各州各州各州的管管管除除除除除除除除除除除除除除除除除上述上述上述上述上述上述上述上述上述上述上述上述上述上述上述上述上述上述上述上述上述上述上述上述上述上述上述上述上述上述上述上述上述上述[^>=][^']*][^']*][^'][^'][^'][^'][^'][^\s>]*)*?\swidth=('[^']*][^']*“][^'][^'][^'][^\s>]*)(?=(?=(?:[^>=][^'][^'][^']*][^'][^'][^']*][^'][^'][^']*][^'][^'][^'][^'][^'][^']*)*][^-][^-][^'][^'][^'][^']*))(?=(?:[^>=]|='[^']*'|=“[^”]*“[^”]*”[^'][^\s>]*)*?\ssstyle=“[^”]*(float:\s*(?:右|左))[^>]*>

扩大
  • 
    
  • (?:
    非捕获组在字符串中移动正则表达式光标,跳过所有引用的属性值。这是绕过属性值的魔法,属性值可能被误认为是理想的属性名称
  • [^>=]
    匹配所有非紧括号或等号的字符
  • |
  • ='[^']*'
    匹配一个等号,后跟单引号、单引号内的所有文本并关闭单引号
  • |
  • =“[^”]*”
    匹配一个等号,后跟双引号、双引号内的所有文本并关闭双引号
  • |
  • =[^'][^\s>]*
    一个等号,后跟一个非引号字符,后跟任意数量的非空格或尖括号字符
  • )*?
    关闭非捕获组,并允许其根据需要重复多次。捕获不会离开标记,因此如果不满足下一个条件,则此特定标记不是我们要查找的标记
  • \ssrc=
    匹配一个空格,后跟
    src=
    。由于上面的非捕获组,这只能是一个属性名
  • 开始捕获gro
                 v