掲示板などで、投稿された名前などに入っている全角スペースを切り落としたいのです。

$name =~ s/\s+//g;

これでやってみたのですが、半角スペースしか切り落とせません。
全角スペースを切り落とすにはどのような方法がありますでしょうか?
自分なりに調べてみたんですが、わかりませんでした。
お時間ございましたら、教えていただけますでしょうか?
方法を紹介してあるURLだけでも結構ですので、よろしくお願い致します。

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

A 回答 (3件)

perlの正規表現で大文字と小文字を区別しない、修飾子があります。


「i」です。
私も試したことがないのですが、この修飾子を使えば出来るのではないかと
思っています。
是非試してみてください。

$name =~ s/ //i;
    • good
    • 0

入ってくるデータがEUCで、スクリプトもEUCなら


$name =~ s/ //g;
でそのままできますよ。
文字コードが違うならjcodeとか使って変換してから
というのもありですが、そんなのも面倒なので

$name =~ s/\x81\x40//g; …SJIS
$name =~ s/\xa1\xa1//g; …EUC

というのがいいのでは。
    • good
    • 1
この回答へのお礼

>入ってくるデータがEUCで、スクリプトもEUCなら $name =~ s/ //g;
でそのままできますよ。

実は、試してみたのですがダメだったのです。
しかし、これを書いたのが、jcodeで変換する前の部分だったので、ダメだったんですね。(^_^;)
sjisの文字コードで指定した方法でやってみたところ、上手くいきました。
ありがとうございました。

しかし、これってもしUNIXユーザの人が書き込んだら、全角スペースは切り取られないということでしょうか?
EUCの方も書いておいたほうがいいのでしょうか?

文字コード表があるURLとかってないんでしょうか?
もし、ご存知でしたら教えていただけますでしょうか?

ご返答に、さらに質問してしまってすみません。
もし、よろしけれご返答いただければ、幸いです。

お礼日時:2001/03/01 15:51

\s は、「 」(スペース=半角スペース)ですので、



それを、「 」(全角スペース)に置きかえれば?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
私も同じことを考えてやってみたのですが、ダメだったのでした。(T_T)
しかし、別の方法で解決いたしました。
ご親切にありがとうございました。

お礼日時:2001/03/01 15:54

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

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

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

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

Q正規表現のAND条件記述手法

お世話になります。
正規表現でAND条件を実現したいのですがうまくいかないでいます。

以下のような任意の文字列
1234567890

があったとして、3~5を抜き出したい時の正規表現は
[3-5]
とすると、そこへ6も対象に入れたいとなれば
[3-5]|6
とすればOR条件でいけると思います。

この逆といいますか、AND条件のように記述したいのですが、
3~5だけど、4はやっぱ含まないというのはどのように表記するのか
手法を教えて頂けたらとおもいます。
[3-5]&[^4]  ???。。

(単純に[3,5]とすれば良いのでしょうが、もっと複雑な表現に応用を考えてます)

宜しくお願い致します。

Aベストアンサー

#4でなくて3-5
$text="1234567890";
while($text =~ /(?=(?!4))[3-5]/g){
print $&;
}

Qperlスクリプト s/^\s+//;  s/\s+$//;  return wantarray ? @out : $out[0]; について

自作の掲示板を作ろうと思い、perlの勉強をしている者です。人様の作ったスクリプトを解析しています。以下のスクリプトはライブラリに記述されていたものです。


sub tttt {
my @out = @_;
for (@out) {
s/^\s+//;
s/\s+$//;
}
return wantarray ? @out : $out[0];


このスクリプトなんですが、 s/^\s+//; の部分の「+」と s/\s+$//; の部分の「+$」、 また「return wantarray~」 の三つの部分のスクリプトが、どういった働きをしているの分かりません。専門書やウェブ上のリファレンスも色々調べたのですが・・。

分かる方いらっしゃいましたらご教授下さると幸いです。よろしくお願いします。

Aベストアンサー

まず前2つの「+」は,正規表現における,「直前の表現を一回以上繰り返し」をあらわします.
「\s」は空白文字一文字を表す正規表現ですので,「\s+」は,「一文字以上の空白文字」になります.
次に,最初の「^」と2番目の「$」は,その正規表現がどこに現れるかを示す記号です.それぞれ,先頭と最後尾にあることを示します.
したがって,「^\s+」は,「最初に空白が一文字以上ある文字列」に,
「\s+$」は「行末に空白が一文字以上ある文字列」にヒットします.
置換構文sはご存知なんですかね.すなわち,この2文で,行の最初と最後の空白を消しているんです.

次に, wantarray ですが,
http://www2u.biglobe.ne.jp/~MAS/perl/ref/wantarray.html
によると,このサブルーチンttttを呼び出すときに,何を返り値にしているかで真偽が決まる関数です.
呼び出す時に配列を希望していたら @out 全体を,変数を希望していたら $out[0]だけを返します.

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

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

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

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

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

Aベストアンサー

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

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

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


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

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

Q$hts =~ s/##([^#]+)##/$FORM{$1}/g の意味を教えてください!

お世話になります。
perl素人なのですが必要に迫られてWEBで調べながら
ソースを解析していますが、次のコードで完全に止まってしまいました。

$hts =~ s/##([^#]+)##/$FORM{$1}/g

この場合、
#hts から ##([^#]+)## を探して $FORM{$1} に全て置き換えようとしていると思うのですが、以下2点が理解できず困っています。

1.##([^#]+)## の意味
$htsに##で囲まれた文字列が複数あるのでそれら全てを探すということでしょうか?

2.$FORM{$1} の意味
$1は1.で検索した結果だと思いますが、$FORM{ }は一体なんでしょうか?

素人がいきなり解析するのは無謀なのは承知の上ですが、
どうしても業務で必要なので、お知恵をお貸し下さい。
よろしくお願いいたします。

Aベストアンサー

1.
perlを基準に「正規表現」で調べてごらん

2.
同じくperlでHTMLのformデータを受け取る方法を調べてごらん

Q任意の回数出現する正規表現について

PHP Version 5.3.1
を使用しています。

次のような2パターンの文字列が与えられた場合に、

fetchAllWithUser ← Userを取得したい
fetchAllWithBlogAndCommentAndImg ← BlogとCommentとImgを取得したい

fetchAllWithの後の任意の文字列(Andは除く)を1つの正規表現の記述で取得したいのですが、
どのような正規表現にすれば良いのでしょうか?

Aベストアンサー

正規表現にする必然性がないのでは?

$arr = array();
if (substr($str, 0, 12) === 'fetchAllWith') { $arr = explode('And', substr($str, 12)); }

Q$wfurikae = 1 if ( &ccom::getShukujitsu( &com::tD( $wwy,$wwm,$wwd )) ne '' );がよく

$wfurikae = 1 if ( &ccom::getShukujitsu( &com::tD( $wwy,$wwm,$wwd )) ne '' );

というスクリプトがあったのですが、

$wfurikae = 1 の後に;もいれずifがきています。

違和感があります。

どのような意味になるのでしょうか。

宜しくお願い致します。

Aベストアンサー

そのまんまだと思いますよ。
if 以下の条件が真の時 $wfurikae = 1となります。
Perlはいろいろな書き方ができますので、こういう書き方もありです。
英語の文法の並びにする書き方です。

Qrubyの正規表現について質問です。

rubyの正規表現について質問です。

rubyを勉強中ですが、
正規表現について質問させてください。

以下のようなことをしたいのですが、どのような記述をすれば実現できるでしょうか?

(1)test → #test
(2)test → test


「test」の場合は、「#」を加え、「#test」に置換したい
「test」の場合は、そのまま「test」としたい。

if を続ければ可能だとは思いますが、
一つの正規表現で(1)のケースだけを引っ掛けられればと思っています。

正規表現でANDが使えればよいのですが、使えないようですし。。。


お手数をおかけしますが、お力をよろしくお願いします。

Aベストアンサー

違いが全く分かりませんが、
例えば、
test→#test
#test→#test
として出力したい場合以下のようにすれば可能です。参考になればですが・・。
str.gsub(/(?<!#)(?=test)/,'#')

Qs/\s*$// の意味

perlでは

  s/\s*$//

というコマンドがあり、これを $a=~s/\s*$//; みたいな使い方を
する事により、変数$aの後ろにある空白と改行コードを削除すると聞いてます。
しかし、このコマンドの何が空白を削除し、何が改行を削除しているような
詳しい部分は間ではしりません。
もし、このコマンドについてご存知の方がいらっしゃいましたら、
詳しく解説していただけないでしょうか?

Aベストアンサー

s  置換コマンド(substitute)で、デリミッタで区切られた(正規表現の)文字列を、次に区切られた文字列で置換する

/  デリミッタ(区切り文字)

\  エスケープ文字

\s  スペース、タブ、改行のいずれか1文字を意味する

*  正規表現(regular expression)で、直前のパターンの0回以上の繰り返し

$  文字列の末尾を表す



--つまり----------------------------------------

\s*     で、空白や改行の繰り返し(_あ___いう__ の、_ 部分)

\s*$    で、行末の複数の空白と改行

s/AAA/BBB/ で、AAA(正規表現) を BBB に置換する

s/\s*$//  で、\s*$ を、// の中の文字列、つまり「無」に置換する

Q言語ではなく、正規表現のみで複数の条件を記述する方法 ?

一つの条件の正規表現は書けるようになりましたが、
条件が重なった場合の対処の仕方がわかりません。

my $val = "12";
#数字のみ
if($val =~ /^[0-9]+$/){
# match!
}

#0で無い
if($val !~ /^0$/){
# match!
}

# 数字で0でない <---複数条件



# 言語でカバーするのではなく、正規表現のみ(1つの正規表現)
# でANDやORやXORができるパターンの記述方法が知りたいです。
if($val =~ /^[0-9]+$/) && ($val !~ /^0$/){
# match!
}

Aベストアンサー

条件式の AND や XOR に相当するものは、正規表現には存在しません。というのも、正規表現で表すのは「パターン」であり、「条件」ではないからです。
※OR についてはパターンの選択を行う | が相当します。

このため、複数の条件式にしたくない場合は、1つで複数の条件を満たすパターンを書くしかありません。また、汎用的な方法もないので、ケースごとにパターンを書き下ろさなければなりません。

No.2 補足より
> 言語を使った&& ||ではスマートではなく、複雑な内容になってきた場合、1行で解決できた方が発展性があるかと思いましてこだわっております。

確かに「0ではない数字」程度のことを複合条件にするのはスマートとは言えないでしょう。しかし、関連性のない事柄を無理なパターンで表現するくらいなら、分解して && や || で結合した方がすっきりします。
また、大概の場合、1行で無理に解決した方が発展性には欠けますので、発展性やメンテナンス性を求めるならば、あまりこだわらない方がよいでしょう。

QPrel正規表現で'$1$'.$saltのあたりが理解できない。

小生Perlを勉強中です。
Perl Codeに以下のようなパスワード暗号処理のサブルーチンが
ありましたが、読めません。教えて下さい。

sub encrypt{
local($inpw)=$_[0];
local(@SALT,$salt,$encrypt);

@SALT=('a'..'z','A'..'Z','0'..'9','.','\');
srand;
$salt=$SALT[int(rand(@SALT)).$SALT[int(rand(@SALT))];
$encrypt=crypt($inpw,$salt)||crypt($inpw,'$1$'.$salt);
return $encrypt;
}

とあります。
特に、下から3行目の($inpw,'$1$'.$salt)が
理解できません。
解説していただければ幸いです。

Aベストアンサー

過去に同様の質問がありました。ctpsysさんの疑問にすべて答えられるかどうかわかりませんが、すくなくとも
>下から3行目の($inpw,'$1$'.$salt)が理解できません
というご質問に対しては参考になるかと思います。

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=74593,http://oshiete1.goo.ne.jp/kotaeru.php3?q=74593,


人気Q&Aランキング

おすすめ情報