![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
$com =~ s/([-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/$1<br>/g;
上記のように、
[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+
が含まれる箇所を置き換えしているのですが、
s?https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+
が含まれる箇所は、置き換えを適用しないようにしたいのですが、
昨日から思考錯誤しておりますが、見当が付きませんでした。
それと、s?はどのような意味があるのでしょうか?
質問ばかりで申し訳ございませんが、宜しくお願いいたします。
No.4ベストアンサー
- 回答日時:
ShiftJISにきちんと対応するには [^A-Za-z] のところをいじる必要があります。
#!/usr/bin/perl
use strict;
use warnings;
use Fatal qw(:void open close);
use feature ':5.10';
my $chars = qr{[-_.!~*\'()a-zA-Z0-9;/?:\@&=+\$,%#]};
my $com = 'aaaaaあいうえおhttp://okwave.jp/かきくけこbbbbbbb';
$com =~ s{ (
http://$chars+
| [^A-Za-z]+
| ($chars (?! http:// )){1,3})
}{$1<br>\n}gx;
say $com;
多分効率も最悪w
>perl okw0311.pl
aaa<br>
aa<br>
あいうえお<br>
http://okwave.jp/<br>
かきくけこ<br>
bbb<br>
bbb<br>
b<br>
有難うございます。
教えていただいた方法を試してみましたところ、エラーが生じてしまいました。
| [^A-Za-z]+
この部分を削除してみましたところ希望通りの動作で動いてくれましたが、削除しても問題ないでしょうか。初歩的な質問で申し訳ありませんが、宜しくお願いいたします。
No.5
- 回答日時:
最初のs?はshttpを考慮してるんだと思う。
shttpのサイトなんて見たことないけどね。
httpsの方がはやったから廃れたっぽい。
> 教えていただいた方法を試してみましたところ、エラーが生じてしまいました。
こっちで試してみたけど動いたよ。
環境とエラー内容くらい提示してみたら?
リンクになってる文字列の前後に、 ZERO WIDTH SPACE がついてたからこのせいかもね。
単純にコピーするとこんなになっちゃう。
$com =~ s{ (
http://$chars+
| [^A-Za-z]+
> この部分を削除してみましたところ希望通りの動作で動いてくれましたが
削除するとこんな風になるんだけど、希望通り?
aaa<br>
aa<br>
あいうえおhttp://okwave.jp/<br>
かきくけこbbb<br>
bbb<br>
b<br>
有難うございます。
申し訳ございません。エラーは勘違いでございました。
Perlのバージョンは5.8.8です。
コメント中に<br>の改行が含まれていた場合に表示おかしくなってしまいました。
my $com = 'aaaaaあいうえお?http://okwave.jp/?かきくけこ<br>bbbbbbb';
の場合ですと、
aaa<br>
aa<br>
あいうえお<br>
http://okwave.jp/<br>
かきくけこ<br>
<
br
>
bbb<br>
bbb<br>
b<br>
このように表示されてしまいました。
No.3
- 回答日時:
できるかどうか知らないけど, 「split で分解して置換を行い, join でつなげる」という後ろ向きな解決策はあるかも.
my @words = split(m{(s?https?:(略)+)}, $com);
for my $word (@words) {
$word =~ s/..../g unless $words =~ m{^s?https?:....};
}
$com = join('', @words);
とか.
でも, 最初の s? って何の意味があるんだろう. これ自体は「s が 1個あってもいいしなくてもいい」なんだけど, その後に http (あるいは https) というプロトコルが続くのは意味不明だなぁ.
有難うございます。
最初のs?はhttp://okwave.jp/qa4756049.htmlこちらで教えていただいたものを使わせてもらっていたのですが、無くても構わないようですので、今後は外してみようと思います。
教えていただいた方法を試してみましたところ、
$word =~ s/..../g unless $words =~ m{^s?https?:....};
この部分でエラーが生じているようでした。いろいろ弄ってみようと思います。
No.2
- 回答日時:
何をどう置き換えようとしているのか (あるいは置き換えないようにしようとしているのか) が全くわからないんだけど, Perl... だよねぇ.
単に「これこれにマッチしなかったら置き換える」じゃダメ?
この回答への補足
補足です。
&auto_link($com);
sub auto_link {
$_[0] =~ s/([^=^\"]|^)(s?https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/$1<a href=\"$2\">$2<\/a>/g;
}
auto_linkのリンクに改行が入ってしまうことを防ぎたいために、上記方法を試行錯誤しております。
有難うございます。伝わり難い説明で申し訳ありません。
半角文字の先頭がhttpの場合は置き換えを適用しないというように考えています。
my $com = 'aaaaaあいうえおhttp://okwave.jp/かきくけこbbbbbbb'
$com =~ s/([-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]{3})/$1<br>/g;
print $com\n;
例えば上記設定でしたら以下のように表示させたいと考えていますが、
http://okwave.jp/が改行されないようにするにはどのような条件で書けばいいのかわかりません。
aaa
aa
あいうえお
http://okwave.jp/
かきくけこ
bbb
bbb
b
No.1
- 回答日時:
まず、[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+だと、ほとんどすべての半角英数字記号文字列にマッチしてしまいますよ。
最長マッチ
? は0個か1個
*は0個以上
+は一個以上
{2}は2個
{2,}は2個以上
{,4}は4個以下
最短マッチ
?? は0個か1個
*?は0個以上
+?は一個以上
{2}?は2個
{2,}?は2個以上
{,4}?は4個以下
アドバイス有難うございます。細かく意味を教えていただき大変勉強になりました。
上記条件での置き換えは普通のやり方では困難な事なのでしょうか?簡単な改造知識しか知らないため途方に暮れております。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 英語 "may be able to"と"can"及び"could"との意味やニュアンスの違いについて 3 2023/01/18 06:06
- Visual Basic(VBA) EXCEL VBA 単語置き換え について質問です ブック名 ぶぶぶ シート名 ししし セル V3〜 3 2023/03/08 01:41
- その他(コンピューター・テクノロジー) 正規表現の置換で一部の文字列をそのまま残したい 2 2022/05/03 19:19
- 電気・ガス・水道 壁掛け給油機の水漏れ補修 4 2022/05/01 13:23
- Visual Basic(VBA) Excel VBA メール作成について 本文の中にExcel でコピーした図を上下に2つ 貼り付けを 2 2023/06/14 01:48
- フリーソフト サクラエディタの正規表現(grep機能)の使い方 3 2022/06/22 10:29
- Word(ワード) ワードフォント 一括置換の方法 4 2022/12/31 00:27
- 英語 提示文の自然な副詞の位置と、位置によるニュアンスの違いについて 4 2022/06/16 13:30
- 一戸建て 現在、新築の照明計画をしているところです。 住宅メーカーからの照明計画の図面がこれでいいのかさっぱり 4 2022/10/01 22:05
- Excel(エクセル) Excelで校閲をする方法はあるでしょうか(取扱説明書への掲載禁止用語の確認) 3 2022/06/11 22:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正規表現
-
CSVファイルの中で、「 , 」カ...
-
英数字のみ全角から半角に変換
-
word差し込み印刷 半角カタカ...
-
全角英数字の必要性が理解できない
-
エクセルで数値を全角文字(カ...
-
ダブルコーテーションの置換
-
VBA 文字に半角が含まれて...
-
VBAでtxtファイルを読み込む際...
-
Excel VBAでPDFファイルをMicro...
-
WORDで改ページすると時々グレ...
-
住宅にカナを入力する際に丁目...
-
char型全角数字から、int型半角...
-
C言語でテキストファイルの内容...
-
正規表現で、全角文字を半角文...
-
CString から LPCTSTRの型に変換
-
カンマ区切りの数字をCSVフ...
-
c# ビルド直前にコードを置換で...
-
マクロを使ってフォルダー内に...
-
VB.net、テキストボックス入力...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
正規表現 URL抽出「 [\\/\\b]{0...
-
シェルスクリプト [[ $number =...
-
正規表現について VB6
-
正規表現について
-
日本語環境下でのバックスラッ...
-
正規表現で2種類ある括弧を区別...
-
perlの正規表現で量指定子を繰...
-
perl初心者です。
-
言語ではなく、正規表現のみで...
-
正規表現の展開
-
正規表現
-
正規表現について教えてください
-
正規表現が解読できません。
-
pythonの正規表現、全角カタカ...
-
行末の正規表現について。
-
正規表現。行頭が○○以外にマッ...
-
配列内の要素をパターンマッチする
-
置き換えについて
-
【GVimの正規表現における検索...
-
「?」が含まれるマッチについて
おすすめ情報