Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 比赛前后的Grep单词?_Regex_Bash_Grep - Fatal编程技术网

Regex 比赛前后的Grep单词?

Regex 比赛前后的Grep单词?,regex,bash,grep,Regex,Bash,Grep,是否有一个简单的解决方案,也提取一个单词之前和一个单词之后连同匹配的单词?例如,假设以下文本 ... put returns between paragraphs ... ... the function returns void ... 搜索将返回 put returns between function returns void 我不是bash专家,但可以总结以下内容 grep -o -P "(?:[a-zA-Z'-]+[^a-zA-Z'-]+){1}returns(?:[^a-zA-Z

是否有一个简单的解决方案,也提取一个单词之前和一个单词之后连同匹配的单词?例如,假设以下文本

... put returns between paragraphs ...
... the function returns void ...
搜索
将返回

put returns between
function returns void
我不是bash专家,但可以总结以下内容

grep -o -P "(?:[a-zA-Z'-]+[^a-zA-Z'-]+){1}returns(?:[^a-zA-Z'-]+[a-zA-Z'-]+){1}" TEXT.FILE

但不确定这是否涵盖所有内容。

只要告诉
grep
只匹配
+返回+

这应该行得通

grep -oP '\w*\s*\breturns\b\s*\w*' file
输入 输出
如果返回之前或之后没有单词,则将匹配要将
返回的
与左/右可选单词匹配:

grep -o -P '(?:\p{L}+\s+)?returns(?:\s+\p{L}+)?' file
其中,
\p{L}
表示“字母”


要将
返回的
与左右两侧的所需单词匹配:

grep -o -P '(?:\p{L}+\s+)returns(?:\s+\p{L}+)' file

“\w+返回\w+”
如果前面或后面的单词丢失(字符串的开头/结尾),则不会返回匹配项。。。。或者如果标点符号有干扰。@WiktorStribiżew-yep,我只是把重点放在开始的基本示例上。两侧的
(\w+)?
可能会使其更加健壮。@fedorqui如果另一个单词包含字符串
返回
,则会匹配该字符串。。。或者单词之间有多个空格。您可以使用
grep-oP'(\w+\w+)?返回(\w+\w+)”
文本“返回”时是否有大小写前后没有一个词?@WiktorStribiżew note没有必要使用
-P
-E
就足够了。@fedorqui:它对性能有任何影响吗?@Wiktor我也怀疑使用
-P
应该更慢一些,所以我只是运行了一个相当不科学的测试
time grep-E'\w+'/dev/null
它需要约0.55秒,而使用
-P
的方法需要约0.85秒。
put returns between
function returns void
returns void
void returns
grep -o -P '(?:\p{L}+\s+)?returns(?:\s+\p{L}+)?' file
grep -o -P '(?:\p{L}+\s+)returns(?:\s+\p{L}+)' file