[PR]ネットとスマホ OCNでまとめておトク!

正規表現で何文字目から何文字目までのヒット

正規表現を使い、何文字目から何文字目までをヒットさせたいです。

例えば、下記の英字があります。

abcdefg

6文字目~7文字目をヒットさせたいです。この場合は、「fg」にヒットさせたいです。
先頭から何文字目までヒットというのならわかるのですが、特定の文字数から文字数まで
ヒットさせたいという場合、どのような正規表現を組めばいいのでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (2件)

抜き出すんじゃなくてマッチさせたいとなると戻り読みですかね・・・肯定戻りも否定戻りも個人的に苦手なんですが



# サクラエディタ(ver 2.0.2.0) + bregonig.dll (ver 2.03)
(?<=^.{5}).{2}
「正規表現で何文字目から何文字目までのヒッ」の回答画像2
    • good
    • 0
この回答へのお礼

おぉ!これこそやりたいことです!どういった原理になっているか理解するまでに時間がかかりますが、学んでみます!ありがとうございます!

お礼日時:2011/06/29 01:13

「正規表現」と言いますが、Perlの正規表現とgrepコマンドの正規表現は微妙に違うので、ご質問内容ならご質問する言語などの環境を明示しないと適切な回答がないように思います。




>例えば、下記の英字があります。
>abcdefg
>6文字目~7文字目をヒットさせたいです。
べたな表現ですが・・・Perlなら /^.....[f][g]/ と /^......[f][g]/ では?
意味
『.』・・・・・・・・改行文字を除く任意の1文字にマッチ
『[任意の文字]』・・・[ ]の中の任意の1文字にマッチ
『^』・・・・・・・・行頭を表す
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。秀丸orサクラエディタで正規表現を使おうと思っていました。

お礼日時:2011/06/28 11:51

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q正規表現 秀丸エディタ 行頭から8文字を残し後ろを

秀丸エディタで、置換えをしてます。
正規表現で、行頭から 8文字を残して、後ろの文字を全部削除させたいのですが。

行頭の8文字以外がどうしてもマッチしてくれません。

[^(^........)]
[^(^.)]{8}

行頭の8文字は、数字、英字、記号です。

どうぞよろしくお願いします。

Aベストアンサー

以下で如何でしょうか?

(?<=^.{8}).*

Q正規表現でAND検索はできるのでしょうか

正規表現でAND検索はできるのでしょうか?

現在ASPでデータベースのデータを検索しようとしているのですが,検索エンジンみたいに複数の語をスペースで区切って入力して,データを絞り込んで表示したいのです。

OR検索みたいにそれぞれの語を"|"でつなぐというようなやり方があるのでしょうか?
それとも一つ一つの語で検索を繰り返すという方法しかないのでしょうか?

ご存知の方,ご教授ください。

Aベストアンサー

&&でつながれたらいかがですか?

(?=.*stat)(?=.*ate)はAND検索という意味ではありません。
statedのようにstatとateを重複して含む単語にマッチするという意味です。

普通はこんな回りくどいことはせず、
/stat/ && /ate/
で済ませると思います。
(もしくは単純にループでまわしていくとか)


foo.*bar|bar.*foo
も、2語程度までが限界ですよね。
10語分繋げることを考えると気が遠くなります。
(記述も処理時間も)

言語によってはさらに処理を短縮できるような
特有な構文がありますから、調べてみればよろしいかと思います。

Q○文字目に文字挿入

お世話になっています。
正規表現の文字置換s///gを使って数字の3桁目に-を挿入したいですが、どうしたらいいのかわかりません。

どなたか教えていただけないでしょうか。

5770001

577-0001

にしたいのでしが…

Aベストアンサー

試してないのですが
s/(.{3})(.*)/$1-$2/;
でよいはずです。

数字確定ならば\dでも可。

Qサクラエディタでの正規表現使い方をお教えください。

 次のようなテキストがあり =より前を削除したいのです
Range("A1").ColumnWidth = 6.5
Range("B1").ColumnWidth = 6
Range("C1").ColumnWidth = 7
Range("D1").ColumnWidth = 6.88
Range("E1").ColumnWidth = 6.25
置換え後は=より後の文字だけにしたいのです
6.5
6
7
6.88
6.25
のように
宜しくお願い致します。

Aベストアンサー

アバウトな書き方をするならば
^.*\s=\s

もうちょっとまじめに書くと
^Range\(\".*\"\)\.ColumnWidth\s=\s

記号等の補足です。
^ 行の先頭
. 何か一文字
* 直前の文字の繰り返し
\s スペース
() ". などは制御文字になるため\をつけてエスケープします。

Q正規表現で一つ目の区切り文字で区切りたいのですが・・・

aaa/bbb/ccc/ddd

aaa/bbb/ccc/ddd/eee

aaa/ccc/ddd

$a=~/(.*)\/(.*)/;
$1はそれぞれ
aaa/bbb/ccc
aaa/bbb/ccc/ddd
aaa/ccc
と成ってしまいます。

このように
「最後の/」で分けられてしまいます。

一つ目の/で分けるにはどうしたらよいでしょうか。

Aベストアンサー

$a=~/^([^\/]*)\/(.*)/;
としてみてはいかがでしょうか。

Q正規表現。行頭が○○以外にマッチさせたい。

正規表現を勉強しています。行頭がxyzという文字列以外をマッチさせたいと思っています。行頭にマッチさせるには"^xyz"と理解できます。[^xyz]とやるとx,y,z以外の文字列にマッチするのもわかります。ただ、これだと

123 xyz

の文字にもマッチしていまいます。行頭がxyzで続く文字列以外にマッチさせる正規表現はどうかけばよろしいでしょうか?

Aベストアンサー

パターンを使うんでしょうね。 → ^(?!xyz)
Excelマクロでの実験プログラム
Dim A, P$
Set A = CreateObject("VBScript.RegExp")
A.Global = True
A.IgnoreCase = True
P = "^(?!xyz)"
A.Pattern = P
Debug.Print A.Test("xyz123") '★(1)
Debug.Print A.Test("123xyz") '★(2)
(1)先頭が「"xyz"以外」という条件に反するのでFalse
(2)先頭が「"xyz"以外」という条件に合うのでTrue

http://msdn.microsoft.com/ja-jp/library/cc392020.aspx

Qsqlplusで表示が変なので、出力を整形したい。

いつもお世話になっています。

サーバにアクセスしてsqlplusで、
データを調べたいのですが、
出力形式が見づらくて困っています。

よくわからいのですが、
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------
1の値 2の値
3の値
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------

上記のように意味不明な形式で出てきます。

例えばこんな風に

select カラム1,カラム2,カラム3 from hoge;

カラム1 1の値
---------------------------
カラム2 2の値
---------------------------
カラム3 3の値

等のように分かりやすく表示できないでしょうか?

ちなみにOracle9iR2を使用しています。
sqlに関するツールは使用できないルールでして、あくまでsqlplusのコマンド上でみやすくしなければなりません。

分かりづらくですいませんが、皆さま、ご教授お願いします。

いつもお世話になっています。

サーバにアクセスしてsqlplusで、
データを調べたいのですが、
出力形式が見づらくて困っています。

よくわからいのですが、
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------
1の値 2の値
3の値
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
-----------------------...続きを読む

Aベストアンサー

SQLPLUSを起動して、

SQL>set linesize 列数

でどうだ。

SQL>show linesize

で確認ができる。

Q3つの表の外部結合

表A、B、Cの3つがあり、Aのすべての行を出力したいと考えています。
外部結合を用いるのだとは思うのですが、3つの表に対して行う場合の
書き方がわからず困っています。
ご教授いただけないでしょうか?
select * from a,b,c
where a.商品ID =b.商品ID (+) and b.商品ID (+) =c.商品ID (+)
としてみましたが、うまくいきませんでした。

Aベストアンサー

ansi構文の趣旨からいえば、結合条件と絞り込み条件は分けて書くので・・

select *
from a
left join b on (a.商品ID =b.商品ID)
left join c on (b.商品ID =c.商品ID)
where a.年月 = 任意の値

と書くのが一般的でしょうね。

Q正規表現について(最後にマッチした以降のデータ取得)

以下の文字列から、最後の「\」以降の文字列を取得する方法を
教えていただけますでしょうか。

D:\PROGRAM\ANALYZE\LAN\data0123.dat

この文字列から、「data0123.dat」を取り出したい。
「data0123.dat」の部分は、拡張子含めていろいろ変わります。

よろしくお願いいたします。

Aベストアンサー

もっとスマートな式があるかもしれませんが
my $S = 'D:\PROGRAM\ANALYZE\LAN\data0123.dat';
## 正規表現
$S =~ m/.*\\([^\\]+)$/;
print $1;
ただし、ファイルパスを見るとDOS(Windows)環境のようですので環境はShift-JIS。
全角文字が混ざった場合には正規表現が正常動作する保障がありません。
正規表現の練習なら良いのですがこの程度の処理なら組み込み関数使った処理のほうが効率が良いと思います。
## 組み込み関数
print substr($S,rindex($S,"\\")+1);
ほかにも書き方はあります。

Q正規表現で最初にマッチしたものだけを選択する方法

秀丸の正規表現を用いて「その行で最初にマッチした単語」だけを取得したいのですが可能でしょうか

一例をあげますと、
検索文字列:ももりんごみかんももりんごみかん
とあるとき、左の「りんご」だけを「なし」に置換したいという希望です。

Aベストアンサー

> ついでといっては恐縮ですが、(?\2)という部分がどのような意味なのか教えて
これより前の部分で、() で囲まれた部分の 2 つ目のみにヒットさせる
という意味になります。詳細は、HmJre.dll のヘルプをご覧下さい。
秀丸エディタのヘルプの正規表現の項目からも辿れます。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング