Ars*_*eep 0 regex screen-scraping
我试过以下表达式.
(http:\/\/.*?)['\"\< \>]
(http:\/\/[-a-zA-Z0-9+&@#\/%?=~_|!:,.;\"]*[-a-zA-Z0-9+&@#\/%=~_|\"])
Run Code Online (Sandbox Code Playgroud)
第一个表现不错但总是给出匹配网址的最后一个额外字符.
例如:
http://domain.com/path.html"
http://domain.com/path.html<
Run Code Online (Sandbox Code Playgroud)
注意
" <
Run Code Online (Sandbox Code Playgroud)
我不希望他们使用URL.
您可以使用前瞻而不是['\"\< >]参与匹配,即:
(http:\/\/.*?)(?=['\"\< >])
Run Code Online (Sandbox Code Playgroud)
一般来说,ab匹配ab,a(?=b)匹配a(如果它后面跟着b).
所有口味都不支持Lookarounds.更广泛支持的是捕获组.
一般来说,虽然(a)b仍然匹配ab,但它也在a第1组中捕获.
根据需要,使用否定字符类通常比使用不情愿字符要好得多.*?(在这种情况下后跟先行断言终止模式).
让我们考虑匹配"之间的一切问题A和ZZ".事实证明,这个规范是模棱两可的:我们将提出3种模式来实现这一点,它们将产生不同的匹配.哪一个是"正确的"取决于期望,这在原始陈述中没有正确传达.
我们使用以下作为输入:
eeAiiZooAuuZZeeeZZfff
Run Code Online (Sandbox Code Playgroud)
我们使用3种不同的模式:
A(.*)ZZ产生1个匹配:AiiZooAuuZZeeeZZ(上ideone.com所见)
iiZooAuuZZeee A(.*?)ZZ产生1个匹配:AiiZooAuuZZ(上ideone.com所见)
iiZooAuuA([^Z]*)ZZ产生1个匹配:AuuZZ(上ideone.com所见)
uu以下是它们匹配的直观表示:
___n
/ \ n = negated character class
eeAiiZooAuuZZeeeZZfff r = reluctant
\_________/r / g = greedy
\____________/g
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
106 次 |
| 最近记录: |