学习webmagic时搜集的一点小资料

Xpath

XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。XML 文档是被作为节点树来对待的。树的根被称为文档节点或者根节点。

表达式

描述

nodename

选取此节点的所有子节点。

/

从根节点选取。

//

从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。

.

选取当前节点。

..

选取当前节点的父节点。

@

选取属性。

例子

路径表达式

结果

bookstore

选取 bookstore 元素的所有子节点。

/bookstore

选取根元素 bookstore

注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径!

bookstore/book

选取属于 bookstore 的子元素的所有 book 元素。

//book

选取所有 book 子元素,而不管它们在文档中的位置。

bookstore//book

选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。

//@lang

选取名为 lang 的所有属性。

 

谓语

路径表达式

结果

/bookstore/book[1]

选取属于 bookstore 子元素的第一个 book 元素。

/bookstore/book[last()]

选取属于 bookstore 子元素的最后一个 book 元素。

/bookstore/book[last()-1]

选取属于 bookstore 子元素的倒数第二个 book 元素。

/bookstore/book[position()<3]

选取最前面的两个属于 bookstore 元素的子元素的 book 元素。

//title[@lang]

选取所有拥有名为 lang 的属性的 title 元素。

//title[@lang='eng']

选取所有 title 元素,且这些元素拥有值为 eng lang 属性。

/bookstore/book[price>35.00]

选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00

/bookstore/book[price>35.00]/title

选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00

 

通配符

描述

*

匹配任何元素节点。

@*

匹配任何属性节点。

node()

匹配任何类型的节点。

 

路径表达式

结果

/bookstore/*

选取 bookstore 元素的所有子元素。

//*

选取文档中的所有元素。

//title[@*]

选取所有带有属性的 title 元素。

 

或运算

路径表达式

结果

//book/title  |  //book/price

选取 book 元素的所有 title price 元素。

//title  |  //price

选取文档中的所有 title price 元素。

/bookstore/book/title  |  //price

选取属于 bookstore 元素的 book 元素的所有 title 元素,以及文档中所有的 price 元素。

 

轴:可定义相对于当前节点的节点集

ancestor

选取当前节点的所有先辈(父、祖父等)。

ancestor-or-self

选取当前节点的所有先辈(父、祖父等)以及当前节点本身。

attribute

选取当前节点的所有属性。

child

选取当前节点的所有子元素。

descendant

选取当前节点的所有后代元素(子、孙等)。

descendant-or-self

选取当前节点的所有后代元素(子、孙等)以及当前节点本身。

following

选取文档中当前节点的结束标签之后的所有节点。

namespace

选取当前节点的所有命名空间节点。

parent

选取当前节点的父节点。

preceding

选取文档中当前节点的开始标签之前的所有节点。

preceding-sibling

选取当前节点之前的所有同级节点。

self

选取当前节点。

 

 

XPath 使用路径表达式在 XML 文档中进行导航,那么位置路径是什么样子的呢?

位置路径表达式

位置路径可以是绝对的,也可以是相对的。绝对路径起始于正斜杠( / ),而相对路径不会这样。在两种情况中,位置路径均包括一个或多个步,每个步均被斜杠分割:

绝对路径:/step/step/...

相对路径:step/step/...

式子中的step 也就是步包括:        语法:轴名称::节点测试[谓语]

轴(axis定义所选节点与当前节点之间的树关系

节点测试(node-test识别某个轴内部的节点

零个或者更多谓语(predicate更深入地提炼所选的节点集

例子

结果

child::book

选取所有属于当前节点的子元素的 book 节点。

attribute::lang

选取当前节点的 lang 属性。

child::*

选取当前节点的所有子元素。

attribute::*

选取当前节点的所有属性。

child::text()

选取当前节点的所有文本子节点。

child::node()

选取当前节点的所有子节点。

descendant::book

选取当前节点的所有 book 后代。

ancestor::book

选择当前节点的所有 book 先辈。

ancestor-or-self::book

选取当前节点的所有 book 先辈以及当前节点(如果此节点是 book 节点)

child::*/child::price

选取当前节点的所有 price 孙节点。

选取所有 title 节点  /bookstore/book/title

选取 bookstore 元素下面的第一个 book 节点的 title    /bookstore/book[1]/title

选取 price 节点中的所有文本  /bookstore/book/price/text()

选取价格高于 35 的所有 price 节点    /bookstore/book[price>35]/price

选取价格高于 35 的所有 title 节点   /bookstore/book[price>35]/title

 

 

java正则表达式

^为限制开头 例如:^java     条件限制为以Java为开头字符
$为限制结尾  例如:java$     条件限制为以java为结尾字符


.  条件限制除\n以外任意一个单独字符  

例如:java..     条件限制为java后除换行外任意两个字符

         [\n.]       任意一个单字符

[] 加入特定限制条件

[a-z]     条件限制在小写a to z范围中一个字符
[A-Z]     条件限制在大写A to Z范围中一个字符
[a-zA-Z] 条件限制在小写a to z或大写A to Z范围中一个字符
[0-9]     条件限制在小写0 to 9范围中一个字符
[0-9a-z] 条件限制在小写0 to 9或a to z范围中一个字符
[0-9[a-z]] 条件限制在小写0 to 9或a to z范围中一个字符(交集)

[\\u4e00-\\u9fa5] 匹配一个汉字


[]中加入^后加再次限制条件[^]
[^a-z]     条件限制在非小写a to z范围中一个字符
[^A-Z]     条件限制在非大写A to Z范围中一个字符
[^a-zA-Z] 条件限制在非小写a to z或大写A to Z范围中一个字符
[^0-9]     条件限制在非小写0 to 9范围中一个字符
[^0-9a-z] 条件限制在非小写0 to 9或a to z范围中一个字符
[^0-9[a-z]] 条件限制在非小写0 to 9或a to z范围中一个字符(交集)


| 两者取一
J|A     J或A
Java|Hello     Java或Hello

 

()中规定一个组合类型

(.+?)

限制条件为特定字符出现0次以上
J*     0个以上J
.*     0个以上任意字符
J.*D     J与D之间0个以上任意字符

限制条件为特定字符出现1次以上
J+     1个以上J
.+     1个以上任意字符
J.+D     J与D之间1个以上任意字符

限制条件为特定字符出现有0或1次
JA?     J或者JA出现

 

{a} 限制为连续出现指定次数字符
J{2}     JJ
J{3}     JJJ
{a,} 文字a个以上
J{3,}     JJJ,JJJJ,JJJJJ,....
{a,b} 文字a个以上,b个以下
J{3,5}     JJJ或JJJJ或JJJJJ



 \w :匹配包括下划线的任何单词字符,等价于 [A-Z a-z 0-9_]

\W :匹配任何非单词字符,等价于 [^A-Z a-z 0-9_]

\d  :匹配一个数字 [0-9]

\D :匹配一个非数字[^0-9]

\s : 表示有空格组成,空格包含了“\n”、“\t”之类的

\S:表示非空格

有时候我们会看到\\w \\d  那是因为他出现在字符串里,多加一个\代表转义





你可能感兴趣的:(正则表达式,xpath)