我们有一个基于 Web 的应用程序,您可以在其中在搜索框中输入正则表达式,然后它会从数据库中返回匹配项
下面是数据库条目可能是什么样子的示例。它们以逗号分隔(将每条记录视为一个系列 - 每个系列可以有 1 到 n 个条目):
record1: "john doe"<john@email.com>;male,"jane doe"<jane@email.com;female
record2: "john smith"<jsmith@email.com>
record3: "smith, jane"<jane@smith.com>
Run Code Online (Sandbox Code Playgroud)
我需要做的是输入一个正则表达式,所以我只得到第一个条目。在工作场景中,输出将是分隔符之前的所有内容:
record1: "john doe"<john@email.com>;male
record2: "john smith"<jsmith@email.com>
record3: "smith, jane"<jane@smith.com>
Run Code Online (Sandbox Code Playgroud)
实际上,我所有的尝试都是将“smith, jane”中的逗号视为分隔符。
如果逗号在引号中,我如何忽略它?(为了面向未来,忽略单引号中的逗号的能力也很好)
我只能使用正则表达式,不能使用 awk/sed 等,正则表达式的风格是 POSIX 扩展。
强调:您确实需要像评论指出的那样更详细地描述您的环境。
这是在我的 Unix shell 上的一次尝试,使用sed
Yes, I Know you don't Want sed,但它可能会帮助您在您的环境中构建正则表达式。
data.txt:
"john doe"<john@email.com>;male,"jane doe"<jane@email.com;female
john_doe"<john@email.com>;male,"jane doe"<jane@email.com;female
# sed -n 's|^\("[^"]\+"[^,]\+\).*|\1| p' data.txt
"john doe"<john@email.com>;male
Run Code Online (Sandbox Code Playgroud)
这里的正则表达式的想法是跳过第一对双引号,然后查找逗号。
如果没有双引号就会失败。
可以缩放以使用单引号。
更新:
寻找@随后的,...
data.txt:
"john doe"<john@email.com>;male,"jane doe"<jane@email.com;female
john_doe"<john@email.com>;male,"jane doe"<jane@email.com;female
# sed -n 's|\([^@]\+[^,]\+\),.*|\1| p' data.txt
"john doe"<john@email.com>;male
john_doe<john@email.com>;male
Run Code Online (Sandbox Code Playgroud)
现在你得到了两种情况,然后还有那些没有字符串名称甚至<>换行的情况。
但是,您的问题是依赖于,record2 和 record3 的 -- 中断,其中您只有一封电子邮件且没有逗号。,如果您在每条记录的末尾强制添加 a ,仍然可以工作。
| 归档时间: |
|
| 查看次数: |
4156 次 |
| 最近记录: |