在RegExr上从YouTube播放列表网站源代码中提取/watch?v=something_until_&
,然后输入此正则表达式。
/watch\?v=(?:(?!&).)*
例如:/watch?v=8j1GYEJSQKs
但是将其作为Windows grep命令输入不起作用。
grep "/watch\?v=(?:(?!&).)*" source.txt > links.txt
我只是得到类似的东西:
grep "/watch?v=" source.txt > watch.txt
但这会输出找到/watch?=
grep正则表达式与RegExr上的正则表达式有何不同?
答案 0 :(得分:3)
grep默认使用BRE
,这意味着它不支持look-behind / ahead。
使用grep -P
然后重试,使用PCRE
答案 1 :(得分:2)
仅使用grep -o
这就是区别:
$ echo "test abc test" | grep "a.*c"
test abc test
$ echo "test abc test" | grep -o "a.*c"
abc
答案 2 :(得分:1)
您的正则表达式使用了不必要的负面预测,默认情况下不支持。
试试这个:
/watch\?v=[^&]+