
わかりにくいタイトルで恐縮です。
初歩的な問題かもしれませんが、もう何日も悩み続けており、ヒントでもいただけると助かります。
たとえば、
正規表現にて 英字のみ(1文字以上) という場合は
preg_match("/[a-z]+/i",$string)
という風にすればいいと思います。
ここで、英字のみ(1文字以上) しかし、abc という連続文字列があれば該当させない、という場合どういう正規表現を作ればいいのでしょうか?
preg_match("/[a-z^(abc)]+/i",$string)
みたいなヘンテコなものを作ってみたりしてみたのですが、文法違いなのか、やはり正常には動いてくれません。
([^a][^b][^c])
なんていうのも違いますし。
狙いは、文字列の最初でも最後でも途中でも、指定文字以外や指定連続文字列がある場合は、エラーを出す、というようなものにしたいのです。
なにかヒントいただければと思います。
No.3ベストアンサー
- 回答日時:
「Perl正規表現雑技」にそのまんまズバリな解答がありました。
ご質問の条件に合うようアレンジし、PHPで書くと次のようになります。
preg_match("/[0-9]+(?:(?!abc)[a-zA-Z])+[0-9]+/",$string)
ちなみに、指定連続文字列が大文字小文字を区別するものと仮定して、敢えてi指定はしていません。
私の環境で試した結果、次のようになりました。
[12345ababbccc67890]:OK!
[12345abcabbcc67890]:NG!
[12345abbabccc67890]:NG!
[12345aabbbabc67890]:NG!
[12345ababb@$&67890]:NG!
[12345ABBABCCC67890]:OK! ←大文字小文字を区別しているのに注意!
[12345abc67890]:NG!
参考URL:http://www.din.or.jp/~ohzaki/regex.htm#Without
skytemple様
回答ありがとうございます。
とてもシンプルで書きやすいですね。
本当に知らないことだらけです。
参考サイトを見ていろいろ勉強していきたいと思います。
ありがとうございました。

No.2
- 回答日時:
preg_match("/(?(?=.*abc.*)^$|^[0-9]+[a-z]+[0-9]+$)/i",$str,$matches)
面白そうだったので作ってみましたが、あまり自信はありません。
(?=.*abc.*)が成立した場合、^$で必ず失敗、
(?=.*abc.*)が成立しなかった場合、^[0-9]+[a-z]+[0-9]+$を評価する正規表現です。(?)
合っているかどうか良く分かりません。
taskuni様
お礼が遅くなり申し訳ございません。
教えていただいたように試してみました。
思うような結果ができました!!
勉強になりました。
ありがとうございました。
No.1
- 回答日時:
正規表現一回でできるような気もしますが、
とりあえずif文でやればできます。
if (preg_match("/[a-z]+/i",$string) and !preg_match("/[abc]/i",$string)) {
#OK
} else {
#NG
}
この回答への補足
moon night様
ご回答ありがとうございます。
おっしゃるとおり、2度にわけるとできそうですね。
ただ、できれば正規表現1回でやれたらと思います。
また、運用上
18273aswjsi18726
という感じの文字列から探すことになり
preg_match("/[0-9]+XXXX[0-9]+/i",$string);
の XXXX の部分をどう作ればいいのか、と考えておりました。
先に言うべきことでした、申し訳ないです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA初心者です 検索した数字の行に色をつける 5 2023/02/13 14:22
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/08 09:05
- その他(プログラミング・Web制作) テキストエディタで複数行にわたる文字列の行頭に番号を振る方法 4 2023/03/11 12:57
- PostgreSQL 数値が定期的にあらわれる文字列から、いくつめに出現した数値が指定して切り出したい 1 2023/06/08 13:12
- Java Javaの問題なのですが、「3文字以上の英数字文字列を入力し、文字列の中に文字(9)が出てくるまでの 1 2023/06/06 18:55
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/02/10 11:41
- Excel(エクセル) LEFT関数で文字数を指定しないで取りだす方法 7 2023/06/30 09:49
- Visual Basic(VBA) VBAで、特定の文字より後を削除して残った数値を文字列に変換と特定の文字より前も削除したい 3 2022/04/15 19:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
、"(ダブルクォーテーション)...
-
PHPで<a>タグ内からURLと文字を...
-
PHPで変数から1行目だけを取得...
-
preg_matchの正規表現で
-
preg_matchで Warning: Undefin...
-
正規表現で「0」のみ抽出
-
VBAのコマンドボタンの文字列の...
-
文字の入力で横バー上段、中断...
-
ソースコードの1行が長いとき...
-
エクセルのCOUNTIFが正しくカウ...
-
Excel関数「COUNTIF」で”文字”...
-
メッセージボックスで1025文字...
-
ファイルから読み取った改行文...
-
文字化け変換方法
-
エクセルVBAで改行のやりかた
-
2つ以上の連続する空白文字を除去
-
コンボボックスの項目中に改行を
-
カンマの含まれる文字列の数値...
-
VBAでCSVをExcelに取り込む時に...
-
XMLのタグ名の禁則文字
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPで<a>タグ内からURLと文字を...
-
VBAを使ってHTMLソースから特定...
-
preg_matchでエラーが出ます。
-
PHPで変数から1行目だけを取得...
-
、"(ダブルクォーテーション)...
-
正規表現で「0」のみ抽出
-
電話番号のチェック ハイフン...
-
Smartyで部分一致
-
正規表現でシングルクォーテー...
-
正規表現パターンの記入方法に...
-
preg_matchの正規表現で
-
phpでhtmlソースを解析し、文字...
-
PHPで あるフォルダ内の、特定...
-
PHPメールフォーム URLと半角...
-
正規表現 画像リンクのaltの取得
-
phpで文字列に"や'などが含まれ...
-
正規表現で切り出せません。 <...
-
「半角数字」と「+」を許可する...
-
C#でのワイルドカードを使った...
-
正規表現preg_match('#^(?:[a-z
おすすめ情報