【问题标题】:check if an email contains regex expresions检查电子邮件是否包含正则表达式
【发布时间】:2021-01-26 16:20:50
【问题描述】:

我必须提取电子邮件中包含的所有匹配字符串。

格式很简单,8位,但是当我测试它时,它会跳过最后一个匹配的字符串。

模板电子邮件可以是电子邮件:Hi 12345678 87654321

它返回参考[] = ('12345678')

  public static String[] identificarsrNumber(Messaging.InboundEmail email){
    
    String[] reference= new List<String>();
    if (email.plainTextBody != null) {
        String[] splitemail = email.plainTextBody.split(' ');
        Pattern pt = Pattern.compile('^\\d{8}$');
        for (String s : splitemail) {
            Matcher m = pt.matcher(s);
            if (m.find()) {
                reference.add(s);
            }
        }
     }
  return reference;
  }

【问题讨论】:

  • String[] reference= new List&lt;String&gt;(); java.util.List,它将无法编译
  • 你在 Java 中的代码works as expected 修正了几个错别字。
  • @OHGODSPIDERS 是它的顶点,是 java 和 sql 之间的转换器,是的,它确实可以编译。
  • @WiktorStribiżew 很抱歉错别字,整个方法是西班牙语,当您将输入电子邮件转换为纯文本时它不起作用
  • 不知道它与什么有关,也许您的数据不是您显示的。如果可以有 Unicode 空格,请尝试使用 Unicode 空白模式进行拆分,而不仅仅是常规的 ASCII 空格,请尝试email.plainTextBody.split("(?U)\\s+")

标签: java regex email salesforce apex


【解决方案1】:

您可以确保将字符串与所有 Unicode 空白字符分开:

String[] splitemail = email.plainTextBody.split('(?U)\\s+');

在这种情况下,(?U) 代表Pattern.UNICODE_CHARACTER_CLASS 选项,它使速记字符类能够识别 Unicode。所以,\s 开始匹配各种 Unicode 空白。

【讨论】:

  • 你明白了!谢谢维克托
【解决方案2】:

您的电子邮件是否包含换行符或回车符? 我猜最后 8 位数字部分不匹配,因为它被读取为 87654321\n 并且您仅搜索 8 位数字(通过在模式的数字匹配器周围使用 ^ 和 $)

【讨论】:

  • 可能是这样,那我是否必须更改我的正则表达式?或删除\ns?
  • 刚刚看到 Wiktor 给了你一个正确的分割模式,所以我认为你现在没事了。不要忘记接受他的回答
猜你喜欢
  • 2019-01-05
  • 1970-01-01
  • 2021-08-08
  • 2017-10-05
  • 1970-01-01
  • 2017-06-21
  • 2015-09-20
  • 1970-01-01
  • 2012-03-18
相关资源
最近更新 更多