solrで次の正規表現クエリを実行したいと思いますname:/.+\.m+d$/
。インデックスに次の名前のドキュメントがあります。
readme.md
2013.02.26.md
test.mmd
そしてそれらのどれも一致しません。一致するものを削除すると、 readme.mdエントリに$
一致します。問題は、グローバルパターン修飾子を指定する必要があるのに、これを行うための構文が見つからないことだと思います。
solrで次の正規表現クエリを実行したいと思いますname:/.+\.m+d$/
。インデックスに次の名前のドキュメントがあります。
readme.md
2013.02.26.md
test.mmd
そしてそれらのどれも一致しません。一致するものを削除すると、 readme.mdエントリに$
一致します。問題は、グローバルパターン修飾子を指定する必要があるのに、これを行うための構文が見つからないことだと思います。
これらは、Solr正規表現の一致を実験したことに基づく私の観察結果です。
正規表現内のすべての特殊文字のHTMLパーセントエンコードを実行します。このサイトは、パーセントエンコードを手動で行うのに役立ちました。
値全体を一致させる場合は、文字列フィールドで正規表現の一致を確認してください。テキストフィールドでの正規表現の一致にはトークン化が含まれ、インデックス作成中に生成されたトークンに応じて機能します。
solr正規表現の場合、文字列全体と一致していると常に想定されるため、開始アンカー^
または終了アンカーを指定しないでください。最初または最後にor (またはそのような正規表現)$
を指定しない限り、それは常に最初と最後で一致します。.*
.+
^
$
質問の3つの値を文字列フィールドにインデックス付けしてこのクエリを発行したところ、3つのドキュメントすべてに一致します。
q=id:/.%2B%5C.m%2Bd/
のPCREは.%2B%5C.m%2Bd
です.+\.m+d$
。
私はこれを正規表現の相棒で試しました。ITはあなたのテストと一致します。
.+\.m+d
文字列内のすべての一致を反復処理するためのphp(Preg)構文。
preg_match_all('/.+\.m+d/', $subject, $result, PREG_PATTERN_ORDER);
for ($i = 0; $i < count($result[0]); $i++) {
# Matched text = $result[0][$i];
}
これは、^ $が改行で一致し、ドットが改行と一致し、大文字と小文字が区別されない場合です。
preg_match_all('/.+\.m+d/sim', $subject, $result, PREG_PATTERN_ORDER);
for ($i = 0; $i < count($result[0]); $i++) {
# Matched text = $result[0][$i];
}