我希望匹配以%开头并以%字符结尾的html字符串,方法是用xpath搜索文本。
条件:
我得到的最好的是$xpath->query("//*[text()[starts-with(., '%')][substring(., string-length(.) - 1) = '%']]");
但这不起作用。 php Dom的新东西,很难找到我自己的答案。解释非常有价值!
提前致谢!
修改
请参阅下面的评论,在这种情况下,使用preg_match_all是更好的。目前我正在使用以下代码:
preg_match_all('/%{1}[a-zA-Z0-9-]+?(::?[a-zA-Z0-9-]+?)?%{1}/', $string, $match);
接受此模式的改进。
答案 0 :(得分:0)
这不是XPath的强项 - 您所描述的内容最好由REGEXP引擎处理(在PHP中,可能意味着迭代节点并通过preg_match
运行每个节点)。 / p>
尽管如此,这是一个(非常)hacky XPath方法,我认为做你想要的。您可以在 this XMLPlayground 找到有效的演示。
root/node[
substring(., 1, 1) = '%' and
substring(., string-length(.)) = '%' and
not(string-length(translate(substring(., 2, string-length(.)-2), 'abcdefghijklmnopqrstuvwxyz0123456789-:', ''))) and
(
(
contains(., '::') and
substring(., 2, 1) != ':' and
substring(., string-length(.)-2, 1) != ':'
) or
not(contains(., '::'))
)
]