regex - GREP 正则表达式无法正常工作,但我的正则表达式是正确的
问题描述
希望这是我犯的一个简单错误,总的来说,我对正则表达式相当陌生。基本上我正在尝试从文本文件中提取网站的名称。
myfile.txt 示例:
您好,请在 %sbananas.com%s 度过余下的一天。再见了!
我试图从中只提取香蕉这个词。我的正则表达式如下:
/(?<=m%s)(.*?)(?=\.com)/
在线使用 regexr 它工作得很好,但在 GREP 代码中我只是不知道如何让它正常工作。它不返回任何结果。我尝试了以下几种变体:
grep "/(?<=m%s)(.*?)(?=\.com)/" myfile.txt
grep -E "/(?<=m%s)(.*?)(?=\.com)/" myfile.txt
grep '/(?<=m%s)(.*?)(?=\.com)/' myfile.txt
grep "(?<=m%s)(.*?)(?=\.com)" myfile.txt
grep '(?<=m%s)(.*?)(?=\.com)' myfile.txt
似乎没有任何效果。如果有人能指出我正确的方向,我会很高兴。
解决方案
正则表达式grep
和其他 Unix 工具的问题在于它们通常支持一种、两种或三种不同类型的正则表达式。这些都是:
- 基本正则表达式 (BRE)
- 扩展正则表达式(ERE 或 EREG)
- Perl 兼容的正则表达式(PCRE 或 PREG)
您的模式采用 PCRE 语法,因此您需要将您的模式标识为一种(使用-P
)。请注意,我还删除了m
and =
(%
我不知道应该做什么)。
grep -Po "(?<=%s)(.*?)(?=\.com)" myfile.txt
使用-o
,您说您只想打印匹配的部分。我的grep
手册页将 PCRE 声明grep
为实验性的,因此可能会出现分段错误或评估花费异常多时间的情况。
推荐阅读
- typo3 - 将 .htm 格式的旧 TYPO3 tt_address 模板转换为最新的 tt_address
- validation - Tkinter checkbutton bind 不取更新值
- python - 从 .csv 文件传输到文本文件的数据中删除 'b 和 \n
- html - 如何为 bootstrap 3 nav-tabs 添加填充
- xamarin.forms - 将大图片上传到 FTP 会冻结应用程序
- java - Java:同一类的另一个实例的访问方法
- fullcalendar - fullcalendar 是否支持导出到 Google 日历?
- angular - 如何将子组件路由到另一个子组件
- excel - 多行文本框到 Excel 错误粘贴到 Outlook HTML
- swift - 通过字符串双精度对结构数组进行快速排序