1

私のプログラムでは、管理者が特定の文字列形式をテンプレート ドキュメントの一部として定義できるようにしています。これには正規表現が含まれている場合もあれば、単なるリテラル文字列の場合もあります。

リテラル文字列の場合は、ドキュメント内のすべてのインスタンスに対して文字列をそのまま自動的にコピーしたいのですが、(PERL) 正規表現の場合は、ユーザーに正しい文字列を入力するように求めます。この部分は、おそらく正規表現を理解していない下位レベルのユーザー (非管理者) によって実行されるため、入力するデフォルトとして提示したくありません。

現在、文字列 ala のループで単純な呼び出しを介して正規表現文字を検索しています。

if ( strchr ( "\\^.$({[+-?*|", cInputP [ iLoop ] ) != NULL ) {
    bRet = TRUE;
    break; }

ただし、これは洗練されておらず、構文ミスが発生しやすいようです。PCRE にこれを行う既存の関数はありますか? pcre_study() 関数はこれを行っていないようで、pcre_compile() からこの情報を取得する方法もわかりません。

理想的には、文字列をリテラル部分文字列とユーザーが入力した部分文字列のコンポーネントに分割して、置換文字列に正規表現が含まれている場合でも既知の必要な文字を事前に入力できるようにしたいと考えています。PCRE ライブラリをそのまま使用してこれを行うことはできますか?それとも独自のコードで拡張する必要がありますか?

4

1 に答える 1

2

あなたの要件は、やや誤った分割を意味するため、少し混乱しています。実際、すべての文字列は正規表現であり、それ自体に一致します (もちろん、無効な正規表現を含む文字列を除く可能性があります)。

そのため、文字列が「リテラル文字列または正規表現」であるかどうかを検出しようとするのは少し奇妙です。

リテラル文字列で十分かどうか、または正規表現を使用する必要があるかどうかを、ユーザーが明示的にプログラムに伝えられるようにする方がよい場合があります。

于 2013-08-15T08:07:30.017 に答える