改行を含む文字列から配送情報のデータを取得しようとしています。配送情報は、おそらく 3 ~ 5 行です。いくつかの例を次に示します。
/* Just need from here */
Ship NEXT DAY PM to:
John Doe
Address Street
Sweet, NC 55555
/* to here */
Email: john@doe.net
Phone: 555-555-555
Ship NEXT DAY AM to:
John Doe
Address Street
Apt. 555
Sweet, NC 55555
Email: john@doe.net
Phone: 555-555-555
Ship NEXT DAY PM to:
John Doe
c/o Jane Doe
Address Street
Apt. 555
Sweet, NC 55555
Email: john@doe.net
Phone: 555-555-555
アップデート
私はついに正規表現の解決策を見つけました。また、うまく機能していると思われるコメントが 1 つ挙げられました。「理由」に基づいてどちらが優れているかはわかりませんが、次のとおりです。
Ship (.)+ to\:((\n)(.)+){1,5}
Ship (.)+ to\:[\s\S]*?(?=\nEmail)
今、私はまったく新しい問題を抱えています。結局のところ、MySQL REGEXP は期待どおりに機能しません (API をスキムするのではなく、わざわざ読んでいればわかっていたことでしょう)。だから今、私は部分文字列から正規表現したものを引き出そうとしています IF それが存在する. 取得した IF 部分は、REGEX を使用して Ship To が見つかったかどうかを確認し、NULL でない場合は部分文字列の抽出を開始するだけです。LOCATE
部分文字列抽出は、複数の組み合わせで使用して正確な文字位置を取得しようとするのがかなり面倒であることがわかっているため、私が立ち往生している場所です。早くて簡単な方法を知っている人はいますか?エラーが発生しなくなり次第、作業中のものを投稿します(笑)。
これまでのところ、If ステートメントに次の作業を行っています。
MID(`Notes`, (LOCATE(' to:\n', `Notes`) + 5), (LOCATE('\n\nEmail:', `Notes`) - LOCATE(' to:\n', `Notes`) - 5)) as ShipAddress