正则表达式 - 忽略提取数据中的前7个字符

时间:2018-04-01 14:30:17

标签: regex

从页面源中提取数据。在提取的数据中,需要在显示文本后“。尝试不同的选项。没有工作。任何建议 页面源文本 enter image description here

输入类型名称= loginForm_SUBMIT值=“1”/输入类型=“”名称=“faces.ViewState”id =“faces.ViewState”value =“9uiY / UWJ1 / w3PQ ==”/&gt;&lt; < / p>

正则表达式:value =“[^”1“]。* \ w == 输出:value =“9uiY / UWJ1 / w3PQ == 预期产出:9uiY / UWJ1 / w3PQ ==

2 个答案:

答案 0 :(得分:0)

不要使用正则表达式解析XML / HTML,使用正确的XML / HTML解析器和强大的查询。

理论:

根据编译理论,无法使用基于finite state machine的正则表达式解析XML / HTML。由于XML / HTML的层次结构,您需要使用pushdown automaton并使用LALR等工具操作YACC语法。

中的realLife©®™日常工具:

您可以使用以下其中一项:

xmllint通常默认使用libxml2,xpath1安装(检查my wrapper以使换行符分隔输出

xmlstarlet可以编辑,选择,转换......默认情况下不安装,xpath1

通过perl的模块XML :: XPath,xpath1

安装

xpath

xidel xpath3

saxon-lint我自己的项目,包装在@Michael Kay的Saxon-HE Java库中,xpath3

或者您可以使用高级语言和正确的库,我想:

lxmlfrom lxml import etree

XML::LibXMLXML::XPathXML::Twig::XPathHTML::TreeBuilder::XPath

check this example

DOMXpathcheck this example

检查:Using regular expressions with HTML tags

使用

的示例
xmllint --html --xpath 'string(//input[@value][2]/@value)' file

输出:

9uiY/UWJ1/w3PQ==

答案 1 :(得分:0)

你可以试试这个

(?:value[^v]*value=\")([^\"]*)

您想要的输出在组1中捕获,您可以通过反向引用\ 1或$ 1来检索它。 Demo

&#34;值=&#34;在您的示例文本中出现两次,因此您似乎使用正则表达式(值=&#34; [^&#34; 1&#34;]。* \ w ==)以避免第一个并匹配第二个。

但是正则表达式是错误的,因为角色类&#39; [...]&#39;意味着一个角色。如果字符类后跟量词(repeater)*,+或{min,max}等,那么正则表达式可能意味着具有多个字符的字符串。