在脚本中提取正则表达式捕获组

问题描述 投票:0回答:1

我正在编写一个 CSH 脚本并尝试从给定密钥的源字符串中提取文本。

!/bin/csh -f
set source = "Smurfs\n\tPapa\nStar Trek\n\tRenegades\n\tStar Wars\n\tThe Empire Strikes Back\n"
set toFind = "Star Trek"
set regex = "$toFind[\s]*?(.*?)[\s]*?"
set match = `expr $source : $regex`
echo $match

上面的代码不起作用,所以我遗漏了一些东西。我尝试将“星际迷航”目录放入其中而不是变量。我应该看到

Regenages
作为答案。如果我把“星球大战”代替“星际迷航”,我应该会看到
The Empire Strikes Back

Google 搜索显示了使用 grep 的可能解决方案,例如

match = `grep -Po '<something>' <<< $source

我不知道该写什么

<something>
,我也不是 grep 专家。

在实际代码中,我正在从文件中读取文本。我只是在这里简化了事情。

想法?

regex csh
1个回答
0
投票

以下并不是我问题的字面答案,因为我问了 csh 的问题,但是我使用 bash 编写了一个解决方案。

匹配正则表达式捕获组 在此输入链接描述

匹配空白 如何在 Bash 中将空格与正则表达式匹配?

我使用Tutorial Point来调试。

mystring1='  asdf1@wxyz2  @@a!s#d@f@@  asdf2@wxyz2 b!t#e@g '

tofind='asdf1@wxyz2'
regex="${tofind}[[:space:]]*([.!@\#a-zA-Z0-9]+)"

[[ $mystring1 =~ $regex ]]

echo $'\n'
echo $'\n'
echo '***********************'
echo ${BASH_REMATCH[1]}
echo '***********************'
© www.soinside.com 2019 - 2024. All rights reserved.