0

HTMLで「myfunc」を検索しています。ただし、大文字小文字は不明です。残念ながら、PHP は XPath 1 で動作するため、すべての検索で大文字と小文字が区別されます。

次のコードを更新して、「myfunc」、「MyFunc」、「myFunc」などを検索するにはどうすればよいですか?

foreach($domxpath->query('//*[@*[contains(.,"myfunc")]]') as $node) {

以下は動作しません。また、 translate() 回避策を実装しようとしたこともありませんでした。

foreach($domxpath->query('//*[@*[matches(.,"[mM][yY][fF][uU][nN][cC]")]]') as $node) {

正規表現が不可能な場合、文字列の配列 (「myfunc」、「MyFunc」、「myFunc」など) を検索するにはどうすればよいですか?

4

2 に答える 2

3

matches は XPath 2 関数です。XPath 1 では、translate を使用して正規化されたケースに変換する必要があります。

 //*[@*[contains(translate(., "MYFUNC", "myfunc"),"myfunc")]]
于 2013-02-28T18:07:03.990 に答える
0

一致には大文字と小文字を区別しないオプションを使用します。

foreach($domxpath->query('//*[@*[matches(.,"myfunc","i")]]') as $node) {

値のシーケンスを比較するには、単に=ノード セットの比較を行うために使用します。

(. = ("myfunc", "MyFunc", "myFunc"))

左のシーケンスの何かが右のシーケンスの何かである場合、true を返します。XPath仕様から:

比較する両方のオブジェクトがノードセットである場合、最初のノードセットにノードがあり、2 番目のノードセットにノードがある場合にのみ、比較は真になります。 2 つのノードの string-values は true です。

于 2013-02-28T17:39:52.427 に答える