我正在尝试从包含换行符的字符串中提取运输信息的数据。运输信息可能在 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
更新
我终于找到了正则表达式的解决方案。在评论中也提到了一个似乎运作良好的评论。不确定基于任何“为什么”哪个会更好,但它们是:
Ship (.)+ to\:((\n)(.)+){1,5}
Ship (.)+ to\:[\s\S]*?(?=\nEmail)
现在我有一个全新的问题。事实证明,MySQL REGEXP 没有像我预期的那样运行(如果我费心阅读而不是浏览 API,我会知道的)。所以现在我试图从一个子字符串中提取我刚刚正则表达式的内容,如果它存在的话。我得到的 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