java - 如何将正则表达式与模式匹配器一起用于多个字符串?

标签 java regex

我正在读取 List<String> 中的字符串列表。字符串如下所示:

blah1
blah2
blah3
blah4

在java中,我想构建一个正则表达式来检查像这样的模式 (myString/|yourString)并将其连接到上面列表中的每个字符串,同时对文件的行进行模式匹配。

所以我这样做(下面的代码只是片段):

String pattern = "(myString/|yourString.)"
private String listAsString;  

private void createListAsStrings() {
   StringBuilder sb = new StringBuilder();

   for(String string : stringList) {
      sb.append(string + "|");  # using the pipe hoping it will do an OR in the regex
   }

   listAsString = sb.toString();
}

为了构建模式,我尝试执行以下操作:

Pattern p = Pattern.compile(pattern + listAsString);

但是当我开始运行匹配器时,它不会遍历字符串生成器中的字符串列表中的每个字符串。最后一个问题是我的最后一个字符串将包含 |

有没有办法匹配myString/blah1yourString.blah1myString/blah2等等..对文件中的每一行使用正则表达式?

有很多代码,所以我只发布了看起来相关的内容。

最佳答案

您要构建的表达式应如下所示:

myString/(?:\Qblah1\E|\Qblah2\E)

您需要将 \Q - \E 中的字符串 blah1blah2 等包装在如果字符串包含正则表达式元字符。要修复前导 | 的添加,请使用 boolean 变量来指示这是否是循环的第一次迭代:

StringBuilder sb = new StringBuilder();
boolean isFirst = true;
for(String word : stringList) {
    if (!isFirst) {
        sb.append('|');
    } else {
        isFirst = false;
    }
    sb.append("\\Q");
    sb.append(word);
    sb.append("\\E");
}
String regex = "myString/" + "(?:" + sb + ")";

关于java - 如何将正则表达式与模式匹配器一起用于多个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17531351/

相关文章:

Python:正则表达式仅找到所搜索字符串的一部分

javascript - 如何在字符串中选择星号并设置其样式?

java - 使用 Google 和 Facebook 等身份提供商在 Keycloak 上进行 Android 身份验证

java - 无法获取纬度和经度值。应该更改什么?

java - Android 中 SHA1 哈希实现的问题

java - 如何使用正则表达式解析重复出现的模式

Java - 一段时间后停止executequery()

java - java中的符号表和反射

regex - 仅提取带有感叹号的字母数字和连字符问题

regex - 如何使用正则表达式进行 HTTP 请求文件