从页面源中提取数据。在提取的数据中,需要在显示文本后“。尝试不同的选项。没有工作。任何建议 页面源文本 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 ==
答案 0 :(得分:0)
不要使用正则表达式解析XML / HTML,使用正确的XML / HTML解析器和强大的xpath查询。
根据编译理论,无法使用基于finite state machine的正则表达式解析XML / HTML。由于XML / HTML的层次结构,您需要使用pushdown automaton并使用LALR等工具操作YACC语法。
您可以使用以下其中一项:
xmllint通常默认使用libxml2
,xpath1安装(检查my wrapper以使换行符分隔输出
xmlstarlet可以编辑,选择,转换......默认情况下不安装,xpath1
通过perl的模块XML :: XPath,xpath1 安装xidel xpath3
saxon-lint我自己的项目,包装在@Michael Kay的Saxon-HE Java库中,xpath3
python的lxml
(from lxml import etree
)
perl的XML::LibXML
,XML::XPath
,XML::Twig::XPath
,HTML::TreeBuilder::XPath
ruby nokogiri,check this example
php DOMXpath
,check 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}等,那么正则表达式可能意味着具有多个字符的字符串。