Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/89.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_Parsing - Fatal编程技术网

正则表达式是否匹配HTML中的属性?

正则表达式是否匹配HTML中的属性?,html,regex,parsing,Html,Regex,Parsing,我有一个txt文件,它实际上是某个网页的html源代码。 在该txt文件中,有各种字符串,前面有一个“title=”标记。 e、 g 我感兴趣的是将文本连接框架提取并写入一个单独的文件 像这样,有许多这样的标签,每个标签的标题后面都有一个不同的文本=“这里有一些我需要提取的文本” 我想从html源/txt文件中提取所有这样的文本实例,并写入一个单独的txt文件。文本只能包含小写、大写字母和数字。每个文本字符串的长度(以字符为单位)将有所不同 我正在使用PowerGrep for window

我有一个txt文件,它实际上是某个网页的html源代码。 在该txt文件中,有各种字符串,前面有一个“title=”标记。 e、 g


我感兴趣的是将文本连接框架提取并写入一个单独的文件

像这样,有许多这样的标签,每个标签的标题后面都有一个不同的文本=“这里有一些我需要提取的文本” 我想从html源/txt文件中提取所有这样的文本实例,并写入一个单独的txt文件。文本只能包含小写、大写字母和数字。每个文本字符串的长度(以字符为单位)将有所不同

我正在使用PowerGrep for windows。Powergrep允许我使用正则表达式inout搜索文本文件。 我试着使用搜索作为 标题='[a-zA-Z0-9]

它显示正确的匹配项,但只匹配字符串的第一个字符,只写入与第二个txt文件匹配的文本字符串的第一个字符,而不是所有字符串

我希望所有字符串都匹配并写入第二个文件

使用powergrep,正确的正则表达式或方法是什么


-广告。

这是您需要的正则表达式

title='([a-zA-Z0-9]+)'

但是,如果要做更多类似的事情,使用解析器可能会使它更加健壮和有用。

下面是您需要的正则表达式

title='([a-zA-Z0-9]+)'
但是,如果您要做更多类似的事情,使用解析器可能会使其更加健壮和有用。

试试以下方法:

title=\'[a-zA-Z0-9]*\'
请尝试以下方法:

title=\'[a-zA-Z0-9]*\'

我不熟悉PowerGrep,但是,您的正则表达式不完整。试试这个:

title='[a-zA-Z0-9 ]*'
或者更好:

title='([^']*)'

我不熟悉PowerGrep,但是,您的正则表达式不完整。试试这个:

title='[a-zA-Z0-9 ]*'
或者更好:

title='([^']*)'

其他答案都对正则表达式进行了正确的更改,因此我将解释您的原始版本的问题所在

方括号表示-表示正则表达式将匹配这些括号内的任何字符。但是,与其他所有内容一样,默认情况下它只匹配一次。正如正则表达式“
s
”将只匹配“
ssss
”中的第一个字符一样,正则表达式“
[a-zA-Z0-9]
”将只匹配“
连接框架
”中的第一个字符

通过添加,可以使角色类重复匹配。最简单的方法是在其后面添加一个星号(它将匹配0个或多个事件)。因此,正则表达式“
[a-zA-Z0-9]
*”将匹配一行中尽可能多的字符,直到它遇到不在该字符类中的字符(在本例中,是空格字符,因为括号中没有包含空格字符)

但是正则表达式要准确地描述语法可能非常复杂——如果有人在属性中放置了非字母数字字符,如符号AND,该怎么办?您可以尝试通过将字符集设置为“除引号字符以外的任何字符”来捕获引号之间的所有输入,因此“
”[^']*'
”通常会做正确的事情。通常你还需要记住(例如,用字符串<代码>‘玛莉的羔羊’< /代码>),实际上你想在中间捕获撇号,所以一个简单的“所有但撇号”字符集都不会切断它。不过谢天谢地,根据规范,这不是XML/HTML的问题。


尽管如此,如果有一个现有的库可以为您进行提取,这可能比您自己的库更快、更正确,因此如果可能的话,我会倾向于这样做。

其他答案都对正则表达式进行了正确的更改,因此我将解释您的原始库存在的问题

方括号表示-表示正则表达式将匹配这些括号内的任何字符。但是,与其他所有内容一样,默认情况下它只匹配一次。正如正则表达式“
s
”将只匹配“
ssss
”中的第一个字符一样,正则表达式“
[a-zA-Z0-9]
”将只匹配“
连接框架
”中的第一个字符

通过添加,可以使角色类重复匹配。最简单的方法是在其后面添加一个星号(它将匹配0个或多个事件)。因此,正则表达式“
[a-zA-Z0-9]
*”将匹配一行中尽可能多的字符,直到它遇到不在该字符类中的字符(在本例中,是空格字符,因为括号中没有包含空格字符)

但是正则表达式要准确地描述语法可能非常复杂——如果有人在属性中放置了非字母数字字符,如符号AND,该怎么办?您可以尝试通过将字符集设置为“除引号字符以外的任何字符”来捕获引号之间的所有输入,因此“
”[^']*'
”通常会做正确的事情。通常你还需要记住(例如,用字符串<代码>‘玛莉的羔羊’< /代码>),实际上你想在中间捕获撇号,所以一个简单的“所有但撇号”字符集都不会切断它。不过谢天谢地,根据规范,这不是XML/HTML的问题。


不过,如果有一个现有的库可以为您进行提取,那么这可能比您自己的库更快、更正确,所以如果可能的话,我会倾向于这样做。

我只是不确定需要问多少次HTML文件的正则表达式解析问题(并给出了“使用DOM解析器”的正确解决方案),它每天都会出现

困难在于:

  • 在HTML中,属性可以有单引号、双引号甚至没有引号
  • 类似的字符串可以出现在HTML文档本身中
  • 您必须处理正确的转义;以及
  • 格式错误的HTML(体面的解析器对常见错误非常健壮)
因此,如果你迎合了所有这些(这将是一个相当复杂但仍然不完善的正则表达式),