正規表現+単語検索

解決


Terry  2013-03-11 00:16:03  No: 44011

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


DEKO  2013-03-11 03:19:04  No: 44012

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

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

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


Terry  2013-03-11 06:51:15  No: 44013

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

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


DEKO  2013-03-11 07:17:46  No: 44014

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

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

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


DEKO  2013-03-11 07:22:17  No: 44015

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

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

[_A-Za-z0-9]


Terry  2013-03-11 07:55:37  No: 44016

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加