正規表現+単語検索

解決


Terry  2013-03-10 15:16:03  No: 44011  IP: 192.*.*.*

検索作業を TSkRegExp 一本にまとめるため正規表現を選ばない場合
TRegEx.Escape() で検索単語をエスケープして試してみたのですが
「単語単位での検索」だけがネックになって共通化出来ませんでした
何かよい方法はありませんでしょうか?
以上、よろしくお願いいたしますm(_ _)m

編集 削除
DEKO  2013-03-10 18:19:04  No: 44012  IP: 192.*.*.*

> 「単語単位での検索」だけがネックになって共通化出来ませんでした
エスケープした文字列の前後を '\b' で括ってみるとか?

文字クラス ([]) の外の \b は "単語の境界にマッチ" を意味します。

Ex.
 S := 'Hello';
 Exp := '\b' + TRegEx.Escape(S) + '\b';

編集 削除
Terry  2013-03-10 21:51:15  No: 44013  IP: 192.*.*.*

ありがとうございます!
ほとんど諦めて再度処理を分岐しようかと思っていたところです

一応書いてみますが……
「Nana形式」に単語「Nana」がヒットしないのは仕方ないですね

編集 削除
DEKO  2013-03-10 22:17:46  No: 44014  IP: 192.*.*.*

> 一応書いてみますが……
> 「Nana形式」に単語「Nana」がヒットしないのは仕方ないですね
そうですね。

...ですが DefinedCharClassLegacy をオプションに含める事で
英数字のみの単語による検索が可能になります。

"エスケープする文字列" に英数字以外が含まれないのであれば、
DefinedCharClassLegacy をオプションに含めるようにしてみてはいかがでしょうか?

編集 削除
DEKO  2013-03-10 22:22:17  No: 44015  IP: 192.*.*.*

> "エスケープする文字列" に英数字以外が含まれない
"アンダーバーと英数字" の誤りです。

SkRegExp で DefinedCharClassLegacy を有効にした時に
単語を構成する文字として扱われるのは以下の通りです。

[_A-Za-z0-9]

編集 削除
Terry  2013-03-10 22:55:37  No: 44016  IP: 192.*.*.*

'\', '[', ']', '^', '$', '.', '|', '?', '*', '+', '(', ')', '{', '}'
が含まれないということですね
前提が単語検索ですので問題ないと思います
本当にありがとうございました

編集 削除