MySQLで正規表現を使う 詳細
1. はじめに
03-Dec-2017 00:30:01.359 Serious [localhost-startStop-1] org.apache.catalina.core.ContainerBase.addChildInternal ContainerBase.addChild: start:
LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/ fendo-SSM]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:753)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:729)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1129)
at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1871)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [org.apache.catalina.webresources.StandardRoot@7822458a]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4969)
standardContext.startInternal(StandardContext.java:5099)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
... 10 more
Caused by: org.apache.catalina.LifecycleException: Failed to initialize component [org.apache.catalina.webresources.JarResourceSet@ 58b14405]
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:135)
at org.apache.catalina.webresources.StandardRoot.startInternal(StandardRoot.java:707)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
... 13 more
Caused by: java.lang.IllegalArgumentException: java.util.zip.ZipException: invalid LOC header (bad signature)
at org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.initInternal(AbstractSingleArchiveResourceSet.java:113)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
... 16 more
Caused by: java.util.zip.ZipException: invalid LOC header (bad signature)
at java.util.zip.ZipFile.read(Native Method)
at java.util.zip.ZipFile.access$1400(ZipFile.java:60)
at java.util.zip.ZipFile$ZipFileInputStream.read(ZipFile.java:717)
at java.util.zip.ZipFile$ZipFileInflaterInputStream.fill(ZipFile.java:419)
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:158)
at sun.misc.IOUtils.readFully(IOUtils.java:65)
at java.util.jar.JarFile.getBytes(JarFile.java:425)
at java.util.jar.JarFile.getManifestFromReference(JarFile.java:193)
at java.util.jar.JarFile.getManifest(JarFile.java:180)
at org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.initInternal(AbstractSingleArchiveResourceSet.java:111)
... 17 more
03-Dec-2017 00:30:01.363 Serious [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Error deploying web application directory D:\Developer\apache-tomcat-8\apache-tomcat-8.0.45\webapps\fendo-SSM
java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [ StandardEngine[Catalina].StandardHost[localhost].StandardContext[/fendo-SSM]]
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:757)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:729)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1129)
at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1871)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:748)
MySQL では正規表現によるマッチングがサポートされているため、複雑なフィルタリング条件には正規表現を使用することを検討してください。正規表現を使用するには、いくつかの正規表現の構文とコマンドをマスターする必要があります。はっちでは、学習用のアドレスやオンラインツールを推奨しています
mvn tomcat7:run
MySQL で正規表現を使用する方法を学ぶ前に、正規表現の構文とディレクティブについて学ぶことができます。
正規表現は、以下のサイトで学ぶことができます。
正規表現オンラインテスト。
注目すべきは
MySQL
がサポートする正規表現は、数ある正規表現の実装のうちのサブセットに過ぎませんので、使用する前にテストすることをお勧めします。必ずしも最初にテーブルを作ってデータを挿入するのではなく、selectでform節を省略するだけで簡単に式を扱えるようになりますし
例えば、次のような方法です。
mysql> select 'I love you China' regexp 'I love you';
+------------------------------+
| 'I love you China' regexp 'I love you' |
+------------------------------+
| 1 |
+------------------------------+
mysql> select '12306' regexp '[:digit:]';
+----------------------------+
| '12306' regexp '[:digit:]' |
+----------------------------+
| 1 |
+----------------------------+
2. 商品テーブルを用意する
まず
product
テーブルは、以下に示す DDL とテーブル・データを持つもので、これをコピーして直接使用することができます。
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for product
-- ----------------------------
DROP TABLE IF EXISTS `product`;
CREATE TABLE `product` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'primary key',
`product_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'product name',
`price` decimal(10, 2) UNSIGNED NOT NULL COMMENT 'product price',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of product
-- ----------------------------
INSERT INTO `product` VALUES (1, 'Apple iPhone 13 (A2634)', 6799.00);
INSERT INTO `product` VALUES (2, 'HUAWEI P50 Pro', 6488.00);
INSERT INTO `product` VALUES (3, 'MIX4', 4999.00);
INSERT INTO `product` VALUES (4, 'OPPO Find X3', 3999.00);
INSERT INTO `product` VALUES (5, 'vivo X70 Pro+', 5999.00);
SET FOREIGN_KEY_CHECKS = 1;
初期データは以下の通りです。
mysql> select * from product;
+ ----+-------------------------+---------+
| id | product_name | price |
+----+-------------------------+---------+
| 1 | Apple iPhone 13 (A2634) | 6799.00 |
| 2 | HUAWEI P50 Pro | 6488.00 |
| 3 | MIX4 | 4999.00 |
| 4 | OPPO Find X3 | 3999.00 |
| 5 | vivo X70 Pro+ | 5999.00 |
+----+-------------------------+---------+
2.1 ステートメント順序
正規表現は、テキストマッチングに使用されます。正規表現を使ってテキストの内容と比較することで、テキストが正規表現で記述されたルールに一致するかどうかを確認することができます。で
MySQL
正規表現は
where
節で使用することができます。
select
クエリーはデータに対してフィルタリングされます。
select * from table_name where regexp
'あなたの正規表現'
order by cloumn_name
;
要求事項
商品テーブルに、商品名に3が含まれる商品を問い合わせる
ステートメントを表示します。
mysql> select * from product where product_name regexp '3';
結果
+----+-------------------------+---------+
| id | product_name | price |
+----+-------------------------+---------+
| 1 | Apple iPhone 13 (A2634) | 6799.00 |
| 4 | OPPO Find X3 | 3999.00 |
+----+-------------------------+---------+
2.2 大文字・小文字を区別する方法
MySQL
デフォルトでは正規表現は大文字と小文字を区別しませんが、ほとんどの場合、英語の大文字と小文字を明示的に一致させる必要があるので
binary
というキーワードがあります。
要求事項
商品名にhuaweiが含まれる商品の商品テーブルを問い合わせる
ステートメントを表示します。
mysql> select * from product where product_name regexp 'huawei';
結果
[...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...]関連
-
mysqlでインデックスに障害が発生する原因は何ですか?
-
MySQLデータベース・インデックスの左端一致の原則
-
MySQLデータベースでvarchar型の数値の大きさを比較する方法
-
SQL基本クエリステートメント
-
MySQL XAが分散型トランザクションを実装する方法を1記事にまとめました。
-
[解決済み】ValueError: 値の長さがインデックスの長さと一致しない|Pandas DataFrame.unique()
-
[解決済み] ユニークなテーブル/エイリアスではない
-
[解決済み】SQLサーバーのテンポラリーテーブルで「すでに名前のついたオブジェクトがあります」エラーが発生する。
-
MySQLの一般的な分割ライブラリおよび分割テーブルスキームの概要
-
Mysqlデータベースへのリンク時にpymysqlがConnection refusedエラーを報告する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
MySQLデータ型の詳細
-
MySQLはこのようなUpdateステートメントを書くべきではありません
-
mysqlのデータ圧縮性能比較 詳細
-
SpringBootのMySQLへの接続は、バックエンドのインターフェイスの操作方法を書き込むためのデータを取得するために
-
MysqlからElasticsearchにデータを同期させる方法を説明します。
-
MySQLインストールチュートリアル(Linux版
-
[解決済み】MySQL エラー 1093 - FROM 句で更新のターゲット テーブルを指定できません。
-
[解決済み] [GROUP BY句に含まれるか、集約関数で使用される必要があります。
-
sql エラーを解決する オペランドには1つの列が含まれている必要があります。
-
MySQLの起動エラー:ERROR 2003 (HY000)。localhost'上のMySQLサーバーに接続できない(10061)