以下のような例文があるとき、
・「行頭ではなく、開きカッコのない、閉じカッコだけがある数字の連続」にマッチする正規表現を教えて下さい。
・数字は半角、カッコ類は全角に統一してあるものとします。
【例文】
------------------------------------
(1)これは例文です。
2)それも例文であります10)。
例文11)その3です。
------------------------------------
この例だと、
10)
11)
だけにマッチするようにしたいです。
正規表現と言っても、実装する言語というかライブラリによって差異があるので、一概にこうとは言えません。
希望している内容を素直に書けるのは、「否定後読み」を持っているタイプです。
「否定後読み」を使うと、こんな感じになります。
(?<!(|^)[1-9][0-9]*)
全角のかっこが分かりにくいので、赤くしてます。
数字は、項番のような気がするので、「ゼロで始まらないもの」と解釈してます。
例えば、javascript だと、こんな感じになります。
(_ => { const RE = /(?<!(|^)[1-9][0-9]*)/; [ "(1)これは例文です。", "2)それも例文であります10)。", "例文11)その3です。", ].forEach(s => { const m = RE.exec(s); console.log(m); }); })();
結果は、こう。
null // (1)にはヒットしない Array [ "10)" ] // 行頭の 2)にはヒットしない Array [ "11)" ]
[^(][0-9]+)
とかになると思うが「前の文字」にも条件があるのでヒットする範囲は必然的に「前の文字」を含んでしまうのではないか。
なお試しに書いてみて全然ヒットしないと思ったら例文の括弧が全角だった。(半角括弧だとエスケープが必要なことがあるので注意。)
正規表現と言っても、実装する言語というかライブラリによって差異があるので、一概にこうとは言えません。
希望している内容を素直に書けるのは、「否定後読み」を持っているタイプです。
「否定後読み」を使うと、こんな感じになります。
(?<!(|^)[1-9][0-9]*)
全角のかっこが分かりにくいので、赤くしてます。
数字は、項番のような気がするので、「ゼロで始まらないもの」と解釈してます。
例えば、javascript だと、こんな感じになります。
(_ => { const RE = /(?<!(|^)[1-9][0-9]*)/; [ "(1)これは例文です。", "2)それも例文であります10)。", "例文11)その3です。", ].forEach(s => { const m = RE.exec(s); console.log(m); }); })();
結果は、こう。
null // (1)にはヒットしない Array [ "10)" ] // 行頭の 2)にはヒットしない Array [ "11)" ]
ありがとうございます! 求めていたのはこれです!
ありがとうございます! 求めていたのはこれです!