PHP 4.4.4 セーフモードです。
文字列$cmtsの中から、
正規表現
#([0-9]{1,8})-([0-9])# (#1234-4#など)
を探し、例の1234 * 4 に置き換えしたいのですが、
下のようにすると、返る結果は「」(└)になってしまいます。
どうすれば正しく1234 * 4ができるのでしょうか。
$cmts = ereg_replace("#([0-9]{1,8})-([0-9])#","\\1" * "\\2",$cmts);
			
ページ: 1
| 投稿者 | 投稿 | 
|---|---|
| 
				
				 #1 2008 年 2 月 11 日(月) 14:35 
			 | 
		|
| 
				会員
				
				 登録者: 2 2008 
				返信数: 2 
				
			 | 
			
				 PHP 4.4.4 セーフモードです。 
			文字列$cmtsの中から、 正規表現 #([0-9]{1,8})-([0-9])# (#1234-4#など) を探し、例の1234 * 4 に置き換えしたいのですが、 下のようにすると、返る結果は「」(└)になってしまいます。 どうすれば正しく1234 * 4ができるのでしょうか。 $cmts = ereg_replace("#([0-9]{1,8})-([0-9])#","\\1" * "\\2",$cmts);  | 
		
| 
				
				 #2 2008 年 2 月 12 日(火) 12:41 
			 | 
		|
| 
				会員
				
				 登録者: 10 2007 
				返信数: 71 
				
			 | 
			
				 的外れかもしれませんが、preg_replace()を使ってみてはどうでしょう? 
			 | 
		
| 
				
				 #3 2008 年 2 月 14 日(木) 18:40 
			 | 
		|
| 
				会員
				
				 登録者: 12 2007 
				返信数: 4 
				
			 | 
			
				 そうですね。 
			$cmts = "1234-4"; $cmts = preg_replace("#([0-9]{1,8})-([0-9])#e", "\\1 * \\2", $cmts); echo "$cmts\n"; でうまく行くのでは。  | 
		
| 
				
				 #4 2008 年 2 月 20 日(水) 17:10 
			 | 
		|
| 
				会員
				
				 登録者: 2 2008 
				返信数: 2 
				
			 | 
			
				 なるほど。 
			$cmts = preg_replace("/#([0-9]{1,8})-([0-9])#/e", "\\1 * \\2", $cmts);でできました。eregでは計算などの特殊記号を使えないのですか。 では、ここでもう少し発展させてもらいますと、 \\1 や \\2 を受け取り、複雑な計算をすることは可能ですか? 可能ならば方法を教えてください。 例えば、\\1 * \\2 の結果を、16進数に変換し、その中の「E」を「X」に変換するなど。 $cmts = preg_replace("/#([0-9]{1,8})-([0-9])#/e", dechex("\\1 * \\2"), $cmts);の時点で正しく表示されません。 | 
		
| 
				
				 #5 2008 年 2 月 20 日(水) 18:51 
			 | 
		|
| 
				会員
				
				 登録者: 10 2007 
				返信数: 71 
				
			 | 
			
				 マニュアルのサンプルを見てみたら、2つ目の引数はダブルクォーテーションで囲ってありましたので 
			$cmts = preg_replace("/#([0-9]{1,8})-([0-9])#/e", "dechex(\\1 * \\2)", $cmts);こんな感じでどうでしょう?(試してないので不安ですが)  | 
		
ページ: 1
日本PHPユーザ会 掲示板 は UseBB 1 フォーラムソフトウェア を使用しています