Если вы ищете просто «bar» в XPath 1.0, вам придется использовать комбинацию функций, в XPath 1.0 нет регулярных выражений.
$xpath->query("//*[
starts-with(., 'bar') or
contains(., ' bar ') or
('bar' = substring(.,string-length(.)-string-length('bar')+1))
]");
В основном это говорит, что найти строки, которые start-with
'бар' или contains
'бар' (обратите внимание на пробелы до и после) или ends-with
'бар' (обратите внимание, что заканчивается XPath 2.0, поэтому я заменил код, который эмулирует эту функцию из предыдущего ответа Stackoverflow .)
, если содержимого 'bar' недостаточно, потому что у вас может быть "one bar, over"
или "This bar. That bar."
, где у вас могут быть другие знаки препинания после 'bar'
. Вы можете попробовать это contains
вместо:
contains(translate(., '.,[]', ' '), ' bar ') or
Это переводит любой '.,[]'
в ' '
(один пробел) ... так что "one bar, over"
становится "one bar over"
, таким образом, будет соответствовать " bar "
, как и ожидалось.