我注意到大多数正则表达式模式以^开头,以$结束。但是,如果未提供这些标识符,则该模式在大多数情况下仍会像预期的那样工作。所以我的问题是,这是否是确保始终如此的好习惯?
我问的原因是我正在使用Django构建正则表达式测试器网站,用户可以在其中存储其正则表达式对象,然后对其进行测试。如果始终是一个好主意,我将编写一个接受用户输入模式的函数,并确保该函数以^开头并以$结束。像这样:
public void createAPKList() throws ZipException, IOException {
apkFileList = new File("C:/eclipse/workspace/Appium-Side-Project/APKDir/APKFiles").listFiles();
System.out.println(apkFileList[apkFileList.length-1].getPath());
apkInstallOptions = storeAndSortFiles(apkFileList, apkInstallOptions);
}
private HashMap<String, File> storeAndSortFiles(File[] fileList, HashMap<String, File> storageList) throws ZipException, IOException{
ZipFile apkDetails;
//Example of calling specific ABI
String aBI = "armeabi-v7a/";
String patternStr = "^lib/"+aBI+"[(.*)].so$";
for(File apk : fileList) {
//how to initialize ZipEntry to assign the any file that ends with ".so" ?
apkDetails = new ZipFile(apk);
ZipEntry readFolders = apkDetails.getEntry(patternStr);
System.out.println(readFolders.getName().startsWith("lib/armeabi-v7a/"));
}
return storageList;
}
任何解释都值得赞赏。
答案 0 :(得分:3)
不,开始和结束锚可能不是一个好习惯。有时可能需要它们,有时可能是不必要的,有时只是为了确保具有更多安全表达式的附加约束而已,尤其是在表达式出于验证目的的情况下。
如果我们希望捕获或搜索字符串中的内容,通常不使用它们。
对于您的目标,这似乎是必要的。
答案 1 :(得分:1)
这些被称为anchors,在您需要查询从头到尾匹配整个字符串时非常有用。没有它们,您将在字符串中搜索查询的任何实例。
例如。
^cats$
将匹配cats
而不匹配ilovecats
或catsaregood
,因为锚点要求在cats
之前或之后不存在字符。但是
cats
将匹配cats
,ilovecats
和catsaregood
,因为所有这些字符串中都包含cats
。
附件中的链接深入介绍了此概念。我希望这会有所帮助!
PS:如果要快速测试正则表达式字符串,Regex tester websites会很有帮助。