シングルクオーテーションで囲んだ文字列No.07996
げっちゅー さん 01/03/14 10:37
 
fortran用の強調表示で文字列部分('で囲まれた部分)をヒットさせ
たいのですが、'[^']+'で正規表現にしてもうまくいきません。
(もちろんこのままでは同じ行に文字列部分が複数ある場合にだめな
ことは分かっています)

試しに強調表示文字列を'AAA'にして、文字列'AAA'だけのテキスト
に対して行ってみましたが、やはりヒットしません。シングルや
ダブルのクオーテーションに正規表現上何か特別な意味はないはず
だと思ったのですが何か勘違いしているのでしょうか。


[ ]
RE:07996 シングルクオーテーションで囲んNo.07997
ながさわ さん 01/03/14 11:04
 
こんにちは、長澤です

>試しに強調表示文字列を'AAA'にして、文字列'AAA'だけのテキスト
>に対して行ってみましたが、やはりヒットしません。シングルや
>ダブルのクオーテーションに正規表現上何か特別な意味はないはず
>だと思ったのですが何か勘違いしているのでしょうか。

正規表現では意味を持ちませんが秀丸の強調文字では意味があります。
『コメント/文字定数のカラー表示』にチェックが入っている状態では、
そのターゲットで文字定数となりうる引用符で括られた文字列は、
強調表示の定義の影響を受けなくなります。
ここのチェックをはずした状態でやってみてください。

[ ]
RE:07997 シングルクオーテーションで囲んNo.07999
げっちゅー さん 01/03/14 11:49
 
こんにちは、げっちゅーです。
長澤さん、どうもありがとうございました。

>正規表現では意味を持ちませんが秀丸の強調文字では意味があります。
>『コメント/文字定数のカラー表示』にチェックが入っている状態で
>は、そのターゲットで文字定数となりうる引用符で括られた文字列は、
>強調表示の定義の影響を受けなくなります。
>ここのチェックをはずした状態でやってみてください。

上記のとおりでした。fortran用の設定ということで『コメント/文字
定数のカラー表示』をfortran77もしくは90用にしてチェックをしてい
たのでそれを外した所、うまくいきました。
また同一行に文字列が複数あるときも、一度強調表示の対象になると
次の文字から検索されるようで'[^']'でうまくいきました。

[ ]
RE:07999 シングルクオーテーションで囲んNo.08000
げっちゅー さん 01/03/14 11:51
 
>次の文字から検索されるようで'[^']'でうまくいきました。
すみません。'[^']+'の間違いです。

[ ]
RE:08000 シングルクオーテーションで囲んNo.08001
番頭++ さん 01/03/14 11:56
 
こんな意味ですか。

//*1a1.mac
    $s = "'(([^']|')+)'|''";
    searchdown $s, regular;
endmacro;

    ''
    '''
    ''''
    'a''b'
    'a' 'b'

フォートランの ' のエスケープは忘れました。


[ ]
RE:08001 シングルクオーテーションで囲んNo.08002
TAKA さん 01/03/14 12:48
 
TAKA です。

現在、正規表現を勉強中なのですが、

>    $s = "'(([^']|')+)'|''";
この表現は、

    $s = "'.*'";
と同じでしょうか?

[ ]
RE:08002 シングルクオーテーションで囲んNo.08003
番頭++ さん 01/03/14 13:27
 
>>    $s = "'(([^']|')+)'|''";
>この表現は、
>    $s = "'.*'";
>と同じでしょうか?

次のようにも書きたいときがあるので、そのようにしました。
$s = "'([^'\\t]|')+'|''";

「秀丸」マクロのリテラルはとかは、こんな風に書きたいでしょう。
$s = "\"\"|\"(\\\\\"|[^\"\\t])*\"";


[ ]
RE:08002 シングルクオーテーションで囲んNo.08004
きいろいまふらあ さん 01/03/14 13:48
 
> >    $s = "'(([^']|')+)'|''";
> この表現は、
>
>     $s = "'.*'";
> と同じでしょうか?

みたいですね。
番頭++さんは、

    $s = "'(([^']|'')+)'|''";

と書きたかったのでしょか?

    $s = "'(([^']|'')*)'";

これは……また違うのかな?

ま、全然わかってませんけど。(^^;

[ ]
RE:08003 シングルクオーテーションで囲んNo.08007
TAKA さん 01/03/14 18:31
 
TAKA です。

>>>    $s = "'(([^']|')+)'|''";
>>この表現は、
>>    $s = "'.*'";
>>と同じでしょうか?
>
>次のようにも書きたいときがあるので、そのようにしました。
>$s = "'([^'\\t]|')+'|''";

これは、タブが対象外という処理が加わったので、任意の文字(.)
の変わりにタブ以外の文字([^\\t])ということで、
$s = "'[^\\t]*'";
でも良いのでしょうか?


>「秀丸」マクロのリテラルはとかは、こんな風に書きたいでしょう。
>$s = "\"\"|\"(\\\\\"|[^\"\\t])*\"";

これだけの正規表現になると、正規表現を考えた人よりも、使う人
の方が優秀でないとだめかもしれませんね。
私には、少し難しいです。

[ ]