今日PHPを使い始めたばかりの初心者です。
「スペース」を「文字」に変換するために
下記のような正規表現を書いたのですがうまく
いきません。

$xxx = ereg_replace( "\s", "aaa", $xxx );

ネットで調べまくったのですが、どこがおかしいのか
よくわかりません。
アドバイスをお願いします。

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

A 回答 (1件)

preg_replace()の最初の引数(パターン)は適切なデリミタで囲まれないと機能しません。



なので、この場合は

$xxx = preg_replace( "/\s/", "aaa", $xxx );

とすればうまく行くと思うんですが。

参考URL:http://www.php.net/manual/ja/ref.pcre.php
    • good
    • 0
この回答へのお礼

ありがとうございます。
解決しました。
マニュアルをよく読めってかんじですね。
でもマニュアルをじっくり読むのって
苦手なんですよね・・(苦笑)

PHPって噂どおり、perlよりもとっつきやすそうで
いいですね。

お礼日時:2001/04/19 16:38

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

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

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

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

Q$str=mb_ereg_replace('goo','グッド',$str);

によって
$strの中の'good'を'グッド'に変更したいのですが
'good'は大文字と小文字を区別しないようにしたいのですがどうしたらいいでしょうか?
例えば
'goOd'も'グッド'にしたいのです。
PHPマニュアルには詳しい使い方が載っていないので困っています。

Aベストアンサー

大文字小文字を無視するなら
mb_eregi_replace
では?

参考URL:http://jp2.php.net/manual/ja/function.mb-eregi-replace.php

Q$str=preg_replace('/\u3000/','  ',$str);

によってutf-8の空白文字をhtmlの空白文字に変換しようとしたのですがエラーになります
どうしたらいいのでしょうか?

Aベストアンサー

>そもそも?のところにコード表現で空白文字を入力する手段はないのでしょうか?
\xE3\x80\x80
で一応いいかと思いますが…

Qpreg_match( '/^(\D+)(\d*)$/' , $変数 , $regs )

if( ! preg_match( '/^(\D+)(\d*)$/' , $変数1 , $regs ) )
{echo ( 'invalid dirname: ' . htmlspecialchars( $変数1 ) );}
$変数2 = $regs[2] === '' ? '' : intval( $regs[2] ) ;

正規表現だと思うのですが、どういう意味か教えてください。

□分からないなりに考えてみました…
▽1行目
$変数の内容が、'/^(\D+)(\d*)$/'にマッチしなければ、$regs へ代入。
▽2行目
マッチしていた場合は、htmlspecialchars関数を実行した後、'invalid dirname: '+その結果を表示する。
▽3行目
$regs配列変数の1番目を、何かして、$変数2 へ代入する。

……誰か教えてください…。

Aベストアンサー

>どこら辺に問題ありそうでしょうか?

まずpreg_matchで$regsを生成していますが、マッチしないケース
すなわち「数字からはじまる文字列」の場合、$regsが未設定になります。
したがって$regs[2] === ''で評価すると$regsが未設定エラーになります。
またエラーレベルを下げた場合でも、$regs[2] === ''はfalseなので
数字ではない文字列をintvalで評価するため$変数2には0が代入されます。

やはりif分岐である程度場合分けをしっかりしてやらないといけないでしょう。
総じて$変数1に代入される文字列の想定を広げて、チェックしてやる必要があります。

また、仮にデータがきちんと通ったとして、$変数2は空文字か数字という
データ型が確定しないフローになっています
たしかにPHPは変数定義がいい加減ではありますが、あまりなんでも
かんでも入れればいいというものではありませんので、ある程度
変数の型が一律になるような工夫が必要だとおもいます。

Qpreg_replace, ereg_replace

$bodyにはテキストファイルなどから読み込んだ、$dateと言う文字(変数ではない)と、改行を含む文字列。

それで、「$date」を、phpスクリプト上の$dateの値に置換したく、

$tmp = preg_replace("/\$date/s", $date, $body);
または、
$tmp = ereg_replace("\$date",$date,$body);
としたのですが、どうも置換されません。何がいけないのでしょうか?

Aベストアンサー

>$が行末記号でないようにするために、頭に「\」を
>付けたのですが、なぜここで\$としたのにもかかわ
>らず、行末記号として認識されてしまったのでしょ
>うか・・・

「$date」はPHPの変数を意味します。その扱いはダブルクォート内部でも同じです。
従ってダブルクォート内部では「\$date」ではじめて文字列としての「$date」になります。
このままでは#1に書いた通り「行末」を意味しますので「文字」としての「$」とするために「\\」を更に付加します。
結果「"\\\$date"」という記述になります。

ダブルクォートを使用せずにシングルクォートを使用すると「'\$date'」とそのまま書けたりします。

Q下記バグ("SQL:\"$sql\"の実行に失敗しました。")が表示されます

※以下プラグラムが走りません。どこに問題があるか教えて下さい。
<?php
/*==
  ユーザ履歴確認  dis_career.php
==*/
session_start();


print <<<EOD
<HTML>
<HEAD>
<TITLE>ユーザ履歴の表示</TITLE>

EOD;


//データベースに接続する
$con = mysql_connect("","","");
$selectdb = mysql_select_db("",$con);

if ($con == false) {
print("データベースに接続できませんでした。");
exit;
}
$sql = "select * from tbl_user order by uid'";
$result = mysql_query($sql,$con);

if ($result == false) {
printf("SQL:\"$sql\"の実行に失敗しました。");
exit;
}
$rows = mysql_num_rows($result); //行数を取得
printf("<CENTER><H2><ユーザ履歴確認></H2></CENTER>");
print("<table border=\"1\" align=\"center\" >\n");
print("<TR><TH><ユーザID></TH><TH>名前</TH><TH>コース名</TH><TH>履歴表示</TH></TR>\n");
if ($rows > 0){
for ($j = 0;$j < $rows;$j++) {
print("<FORM ACTION=\"career.php\" METHOD=\"post\" TARGET=\"right\">");
$data=mysql_fetch_object($result);
$uid=$data->uid;
$name=$data->name;
$course=$data->course;
print("<TR>");
print("<TD>$uid</TD>");
print("<TD>$name</TD>");
print("<TD>$course</TD>");
print("<INPUT TYPE = \"hidden\" NAME = \"uid\ VALUE=\"$uid\">");
print("<TD><INPUT TYPE = \"submit\" NAME = \"career\ VALUE = \"履歴表示\"></TD>");
print("</TR>");
print("</FORM>");
}
}

?>

</BODY>
</HTML>

※以下プラグラムが走りません。どこに問題があるか教えて下さい。
<?php
/*==
  ユーザ履歴確認  dis_career.php
==*/
session_start();


print <<<EOD
<HTML>
<HEAD>
<TITLE>ユーザ履歴の表示</TITLE>

EOD;


//データベースに接続する
$con = mysql_connect("","","");
$selectdb = mysql_select_db("",$con);

if ($con == false) {
print("データベースに接続できませんでした。");
exit;
}
$sql = "select * from tbl_user order by uid'";
$result = mysql_query($sql...続きを読む

Aベストアンサー

エラー情報を表示させてみましょう
if ($result == false) {
printf("SQL:\"$sql\"の実行に失敗しました。");
print mysql_error();
exit;
}


このカテゴリの人気Q&Aランキング

おすすめ情報