0

solrで次の正規表現クエリを実行したいと思いますname:/.+\.m+d$/。インデックスに次の名前のドキュメントがあります。

readme.md
2013.02.26.md
test.mmd

そしてそれらのどれも一致しません。一致するものを削除すると、 readme.mdエントリに$一致します。問題は、グローバルパターン修飾子を指定する必要があるのに、これを行うための構文が見つからないことだと思います。

4

2 に答える 2

2

これらは、Solr正規表現の一致を実験したことに基づく私の観察結果です。

  • 正規表現内のすべての特殊文字のHTMLパーセントエンコードを実行します。このサイトは、パーセントエンコードを手動で行うのに役立ちました。

  • 値全体を一致させる場合は、文字列フィールドで正規表現の一致を確認してください。テキストフィールドでの正規表現の一致にはトークン化が含まれ、インデックス作成中に生成されたトークンに応じて機能します。

  • solr正規表現の場合、文字列全体と一致していると常に想定されるため、開始アンカー^または終了アンカーを指定しないでください。最初または最後にor (またはそのような正規表現)$を指定しない限り、それは常に最初と最後で一致します。.*.+^$

質問の3つの値を文字列フィールドにインデックス付けしてこのクエリを発行したところ、3つのドキュメントすべてに一致します。

q=id:/.%2B%5C.m%2Bd/

のPCREは.%2B%5C.m%2Bdです.+\.m+d$

于 2013-02-27T15:56:14.697 に答える
0

私はこれを正規表現の相棒で試しました。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];
}
于 2013-02-27T15:28:19.277 に答える