【发布时间】:2017-03-08 20:17:56
【问题描述】:
我们拥有的:
在previous question 中,建议使用以下模式来识别与 bash 中的模式匹配的行,并将该行的部分内容提取到 shell 变量中:
re='^\[([[:digit:]:]+)\] \[Server thread/INFO\]: ([^[:space:]]+) entered area ~ ([^[:space:]]+) - [(]PvP[)] ~'
line='[18:51:10] [Server thread/INFO]: Tester121 entered area ~ Wilderness - (PvP) ~'
if [[ $line =~ $re ]]; then
time=${BASH_REMATCH[1]}
player=${BASH_REMATCH[2]}
area=${BASH_REMATCH[3]}
fi
但是,该代码不适用于要匹配的内容可以包含空格的其他代码。考虑以下不太简化的格式:
re='???'
line='[19:27:14] [Server thread/INFO]: Tester121 entered area ~ City - Leader Tester777 - (No PvP) ~'
if [[ $line =~ $re ]]; then
time=${BASH_REMATCH[1]}
player=${BASH_REMATCH[2]}
area=${BASH_REMATCH[3]}
#leader="Tester777"
leader=${BASH_REMATCH[4]}
#pvp="No PvP"
pvp=${BASH_REMATCH[5]}
fi
re 应该是什么?我是正则表达式的新手并尝试学习。
【问题讨论】:
-
最好展示您尝试过的内容 - 所以不仅仅是
re=???占位符,而是您自己尝试扩展正则表达式。 -
...顺便说一句,我尝试更新标题以区分这个问题与上一个问题有何不同。