質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

4回答

5021閲覧

正規表現でエラーがでてしまいます

hidepon

総合スコア206

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

1クリップ

投稿2016/06/09 14:14

編集2016/06/10 01:38
//GETまたはPOST送信で、指定したURLにデータを送信する関数 private function SendRequest($method,$url,$sendData){ //引数が正しいか判定する if(!($method==="GET" || $method=="POST") || !preg_match("/^https?:¥/¥/[a-zA-Z0-9-_.!~*¥'();¥/?:@&=+$,%#]+$/",$url) || (!empty($send) && count($sendData) < 1)){ return false; } (以下中略)

というコードですが、
preg_matchの部分でエラーが出ています。
単純な正規表現だとは思っているのですが、どこがおかしいでしょうか?

ご回答に従って変更すると

!preg_match("/^https?:\/\/[a-zA-Z0-9-_.!~*\'();\/?:@&=+$,%#]+$/",$url) Message: preg_match(): Unknown modifier '1'

となります。
エラーメッセージに該当する部分が分からないのですが・・・。
宜しくお願いいたします。

対象となるURLは
$apiUrl ="https://ptwebcollect.jp/test_gateway/credit.api";
ですが、
Message: preg_match(): Unknown modifier '1'
となります。
理由がワカリマセン・・・・

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hidepon

2016/06/10 01:48

$apiUrl = "https://p...content-available-to-author-only...t.jp/test_gateway/credit.api"; if(!($method==="GET" || $method=="POST") || !preg_match("/^https?:\/\/[a-zA-Z0-9-_.!~*\'();\/?:@&=+$,%#]+$/",$url) || (!empty($send) && count($sendData) < 1)){ return false; } を張り付けて 結果を見ると Main.java:14: error: illegal start of expression if(!($method==="GET" || $method=="POST") || !preg_match("/^https?:\/\/[a-zA-Z0-9-_.!~*\'();\/?:@&=+$,%#]+$/",$url) || (!empty($send) && count($sendData) < 1)){ ^ Main.java:14: error: illegal escape character if(!($method==="GET" || $method=="POST") || !preg_match("/^https?:\/\/[a-zA-Z0-9-_.!~*\'();\/?:@&=+$,%#]+$/",$url) || (!empty($send) && count($sendData) < 1)){ ^ Main.java:14: error: illegal escape character if(!($method==="GET" || $method=="POST") || !preg_match("/^https?:\/\/[a-zA-Z0-9-_.!~*\'();\/?:@&=+$,%#]+$/",$url) || (!empty($send) && count($sendData) < 1)){ ^ Main.java:14: error: illegal escape character if(!($method==="GET" || $method=="POST") || !preg_match("/^https?:\/\/[a-zA-Z0-9-_.!~*\'();\/?:@&=+$,%#]+$/",$url) || (!empty($send) && count($sendData) < 1)){ ^ 4 errors となりました。
kei344

2016/06/10 01:54 編集

そのサービスは言語を切り替えられえるので、PHPでお試しください。また、修正依頼コメント内にコードを書かずに、質問文にコードブロックで「追記」してください。
kei344

2016/06/10 06:20

どのように解決したのかを回答文にお書きいただけませんか?よろしくお願いします。
guest

回答4

0

ベストアンサー

いまここのサイトで確認してみたところ、¥バックスラッシュとは別の円記号(U+00A5)になっていました、

本物のバックスラッシュ(\;U+005C)で書きなおしてみてください。

あと、角カッコ内でハイフンとも一致させたい場合、ハイフンは先頭か末尾に入れる必要があります。

投稿2016/06/09 14:23

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hidepon

2016/06/09 14:43

ご返答有難うございます。 !preg_match("/^https?:\/\/[a-zA-Z0-9-_.!~*\'();\/?:@&=+$,%#]+$/",$url) でも Message: preg_match(): Unknown modifier '1' となってしまいます。 どのように対処すればよいでしょうか? 申し訳ないのですが、教えて頂けるでしょうか?
guest

0

バックスラッシュじゃなくてUnicodeの円マークになってます.
¥\ に直しましょう.

【参考】 「RFC3986定義の厳密なHTTP URIの正規表現」をPHP用に最適化


追記拝見しました.そちらからコピペした正規表現で意図通りに動きますね…

イメージ説明

なお,この簡易的な正規表現には仕様を度外視している部分がある(URLの仕様を満たさないものをURLと見なしてしまい,満たしているものを無視してしまう)点があるので,正確性を重視されるのであれば上記の記事で紹介している完全な正規表現をおすすめします.

投稿2016/06/09 14:22

編集2016/06/09 16:04
mpyw

総合スコア5223

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mpyw

2016/06/09 16:05

追記しました
guest

0

バックスラッシュが全角とかですか?

投稿2016/06/09 14:23

hidekichi

総合スコア366

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hidepon

2016/06/09 14:44

ご返答有難うございます。 !preg_match("/^https?:\/\/[a-zA-Z0-9-_.!~*\'();\/?:@&=+$,%#]+$/",$url) でも Message: preg_match(): Unknown modifier '1' となってしまいます。 どのように対処すればよいでしょうか? 申し訳ないのですが、教えて頂けるでしょうか?
hidekichi

2016/06/09 15:46

送られてくるアドレスに何かしら修飾子が入っていたりとかはないですかね? preg_quote()を通したものを送ってみるとか
mpyw

2016/06/09 16:12 編集

マッチング対象の文字列によってパターン修飾子関連のエラーが出ることは考えられないと思います…それにpreg_quoteはユーザ入力をパターンに埋め込む際に用いる関数なので本来の用途から外れてます.単に転記ミスしているに1票.
hidekichi

2016/06/09 16:12 編集

アドレスの中に記事タイトルのような文字列が入っていて「ボクシング/WBC」とかはないですかね? 正規表現チェッカーとか通してみましたけど、通常のurlは普通に取れているようにも思うんですが...
guest

0

¥マークが全角だけどそれは大丈夫?

投稿2016/06/09 14:22

realizerS

総合スコア265

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mpyw

2016/06/09 14:25

「¥」(C2 A5) と「¥」(EF BF A5) は違うのでご注意ください.「全角」というと一般的には後者を指すと思います.
hidepon

2016/06/09 14:44

ご返答有難うございます。 !preg_match("/^https?:\/\/[a-zA-Z0-9-_.!~*\'();\/?:@&=+$,%#]+$/",$url) でも Message: preg_match(): Unknown modifier '1' となってしまいます。 どのように対処すればよいでしょうか? 申し訳ないのですが、教えて頂けるでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問