喫茶XRAYトップページ

[スレッド全体
]

[10006] 正規表現で\nを検索返信 削除
2016/5/29 (日) 17:31:36 Mr.XRAY
[TRegExprでの置換処理時、「\n」を改行文字として置換させるには]
http://madia.world.coocan.jp/cgi-bin/DelphiBBS/wwwlng.cgi?print+201605/16050007.txt

を読んで思い出したので.
正規表現で \n という文字列を検索する際,\n と指定しても無効です.
正規表現では \ は特別な意味を持つ文字で,メタ文字と呼ばれていいます.
メタ文字を検索の対象にするには,メタ文字の前に \ を付けます.

次のコードは,\n を検索して,改行文字である sLineBreak に置き換えます.
(\n は改行の意味なので...)

# 某掲示板の質問の文章は,私の能力では理解できません.

implementation

uses
  SkRegExpW;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Memo1.Lines.Text := 'テスト用\n\nのテキ\nスト';
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  LRegExp     : TSkRegExp;
  LDestText   : string;
  LReplaceStr : string;
begin
  LRegExp := TSkRegExp.Create;
  try
    LRegExp.Expression := '\\n';
    LRegExp.IgnoreCase := True;

    LReplaceStr := sLineBreak;

    LDestText := LRegExp.Replace(Memo1.Lines.Text, LReplaceStr);
    Memo1.Lines.Text := LDestText;
  finally
    LRegExp.Free;
  end;
end;



[10017] Re:正規表現で\nを検索返信 削除
2016/5/30 (月) 09:59:25 Mr.XRAY
> 正規表現で \n という文字列を検索する際,\n と指定しても無効です.

単に \n という文字列を置換するだけであれば,StringReplace 関数で
いいんですけどね.

procedure TForm1.FormCreate(Sender: TObject);
begin
  Memo1.Lines.Text := 'テスト用\n\nのテキ\nスト';
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  LDestText   : string;
  LReplaceStr : string;
begin
  LReplaceStr := sLineBreak;
  LDestText := StringReplace(Memo1.Lines.Text, '\n', LReplaceStr, [rfReplaceAll]);
  Memo1.Lines.Text := LDestText;
end;


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82