Xpath 1.0
XPath 1.0 не включает поддержку регулярных выражений. Вы должны быть в состоянии достичь желаемого соответствия с помощью следующего выражения:
//td/a['pieces'=substring(@href, string-length(@href) -
string-length('pieces') + 1) and
'pieces'=translate(@href, '0123456789', '') and
string-length(@href) > 5 and
string-length(@href) < 10]
Первый тест в предикате проверяет, что строка заканчивается на pieces
. Второй тест гарантирует, что вся строка равна pieces
, когда все цифры удалены (то есть нет других символов). Последние два теста гарантируют, что вся длина строки составляет от 6 до 9, что составляет длину pieces
плюс ноль-три цифры.
Проверьте это на следующем документе:
<table>
<tr>
<td><a href="444pieces">test0</a></td>
<td>no match</td>
<td>no match</td>
<td><a href="123pieces">test1</a></td>
<td><a href="12pieces">test2</a></td>
<td><a href="1232pieces">no match</a></td>
<td><a href="pieces">test3</a></td>
</tr>
</table>
Он должен соответствовать только ссылкам test0
, test1
, test2
и test3
.
(Примечание. Выражение может быть еще более усложнено возможностью появления других символов, предшествующих той части, которую вы пытаетесь сопоставить.)
XPath 2.0
Достижение этого в XPath 2.0 тривиально с функцией matches
.