我有以下字符串my-jar
,我正在尝试编写一个bash正则表达式来提取([^\/]*?)-\d
。
现在我相信以下正则表达式会起作用:echo '/path/to/my-jar-1.0.jar' | grep -Po '([^\/]*?)-\d'
但我不知道如何让bash运行它。
以下内容:my-jar-1
捕获ModelUnitTests
答案 0 :(得分:4)
在BASH,你可以这样做:
mLocationManager = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE);
mlocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 4000, 0, listener);
此处s='/path/to/my-jar-1.0.jar'
[[ $s =~ .*/([^/[:digit:]]+)-[[:digit:]] ]] && echo "${BASH_REMATCH[1]}"
my-jar
将打印捕获的组#1,它是第一个"${BASH_REMATCH[1]}"
内的表达式。
答案 1 :(得分:2)
您也可以使用shell前缀和后缀删除来执行此操作:
function myFunction() {
var c = document.querySelectorAll(".example>a");
for(i=0;i<c.length;i++)
{
c[i].innerHTML = "Click Me!";
}
}
虽然必须分两步进行转换有点烦人,但它的优点是只使用Posix功能,因此它可以与任何兼容的shell一起使用。
注意:顺序很重要,因为基本名称不能包含斜杠,但路径组件可能包含短划线。所以你需要先删除路径组件。
答案 2 :(得分:0)
grep -o
无法识别&#34;捕获群组&#34;我想,就是整场比赛。也就是说,使用Perl regexps(-P
),你可以看到&#34;前瞻&#34;从匹配项中排除-\d
的选项:
echo '/path/to/my-jar-1.0.jar' | grep -Po '[^/]*(?=-\d)'
前瞻/后视的一些参考资料: http://www.perlmonks.org/?node_id=518444