アプリ版:「スタンプのみでお礼する」機能のリリースについて

正規表現で コロン” . ”の連続をどう区別するか悩んでいます

例えば以下のような文字列
(行頭から始まる文章)
----------------------------------------

.おはよう   
..こんばんにゃ
...さよなら

----------------------------------------
コロン” . ”の連続を区別し、そして
文末まで全部取りこむ必要があるのが難しいところです

こうすると上の三行の例の全部が含まれてしまう
^[\.?].*

コロン” . ”1個だけで始まる文の
.おはよう だけ 文末まで取得

コロン” . ”2個で始まる文の
..こんばんにゃ を 文末まで取得

と区別したいときはどうしたらいいのでしょう?

説明するとややこしいのですが
用途は 秀丸のアウトラインの強調文字表現をしたいため

質問者からの補足コメント

  • まとめてお礼します。

    ” . ” は 確かにコロンではないです。
    スムーズに言い間違えると あとも釣られて間違うもんですよね(笑)

    #1の回答へ
    完全にはダメでした

    #2の回答へ
    同じ方法を考えていました
    原理はわかるのですが、実際、その方法でもできましたが
    #3方法がわかりやすかった

    #3の回答
    否定先読み というのがあるんですね。
    おかげ様でシンプルで実現できました。

    素早く解決でき、みなさんいろいろありがとうございました!

      補足日時:2017/03/19 22:01

A 回答 (4件)

以下でどうですか?



1個の場合
^\.[^\.]*

2個の場合
^\.\.[^\.]*
    • good
    • 0

まず最初に


「.」 は「ピリオド」です。「ドット」と呼ぶこともあります。
コロンは「:」です。ピリオドを縦に二つ並べた形をしています。


プログラム中で使うのなら、「先頭の連続する . 」にマッチさせ、その長さを求めればいいのですが、
強調設定用だと、一つずつパターンを記述することになります。
そのパターンは次の通りです
(1) . 1つ
 (1-1) 「.」 だけ
 (2-2) 「.」 の直後に 「.でない文字」 が有り、
(2) . 2つ
 (2-1) 「..」 だけ
 (2-2) 「..」 の直後に 「.でない文字」 が有り、
(3) . 3つ
 (3-1) 「...」 だけ
 (3-2) 「...」 の直後に 「.でない文字」 が有り、

これを
強調1 : (1-1)のパターン
強調1 : (1-2)のパターン
強調2 : (2-1)のパターン
強調2 : (2-2)のパターン
強調3 : (3-1)のパターン
強調3 : (3-2)のパターン
と設定すれば、それぞれに色分けされます。



今、手許に秀丸が無いので、確認まではできないのですが。

^[\.?].*

の[] の中では、各種特殊記号は、特殊な意味を持たなくなります。( ヘルプを参照のこと )
「.」 は「任意の一文字」という意味を失い、ただの「. という文字」になります。
なので、 現状では? は「?と言う文字」になり
?なんのこと?
にも該当するはずです。
※ 例外は \ と ] です。 \. が「 \と.」と解釈されるのか、エスケープされて「.」と解釈されるのかは、確認できてません。

また、「特殊文字としての . 」 は「通常文字 . 」にもマッチするので、「..こんばんにゃ」は
[\.?]にマッチ: .
.*にマッチ: .こんばんにゃ
となります。これを防ぐには、 今 .* を使っている部分を、 「. で始まらない」と変える必要があります
合せると
^\.[^.].*$
これが、(1-2)のパターンです。
後ろに続かない
^\.$
が(1-1)です。
    • good
    • 0

コロン” . ”1個だけで始まる文の場合


^[\.](?!\.).*
または
^[\.]{1}(?!\.).*

コロン” . ”2個だけで始まる文の場合
^[\.]{2}(?!\.).*

コロン” . ”3個だけで始まる文の場合
^[\.]{3}(?!\.).*

否定的先読みで指定した回数以上のコロンがないものを検索します。
「この正規表現を教えて!」の回答画像3
    • good
    • 0

No.3の回答者です。


No.2の回答者さんが指摘されたようにコロンではなくピリオドですね。

回答の一部に質問文をコピペしているので、確認しないで回答に利用
していました。

正しくは

ピリオド” . ”1個だけで始まる文の場合
^[\.](?!\.).*
または
^[\.]{1}(?!\.).*

ピリオド” . ”2個だけで始まる文の場合
^[\.]{2}(?!\.).*

ピリオド” . ”3個だけで始まる文の場合
^[\.]{3}(?!\.).*

でしたね。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!