首页 > 解决方案 > 正则表达式 java 检查开始 [ 和结束 ] 但可能有 \t\r\n 在开始和结束

问题描述

我需要检查一个字符串是否以开头[和结尾,]但在方括号之前/之后允许空格。

我可以使用trim(),然后检查结束字符,但字符串可能很长(超过 100,000 个字符),因此创建新的修剪字符串可能会很昂贵。我想知道在大字符串大小的情况下提供合理性能的最佳方法是什么。

应该通过的示例输入:

"\t\n\r      [  (very long string) ] \t \r \n"

使用正则表达式,我有以下表达式,但不知道它是否绝对正确,或者它是否会表现良好。

(^|\s+)\[((.*)|\s)+\]($|\s+)

解决这个问题的最佳方法是什么?

标签: javaregexstring

解决方案


这是一个快速的 JavaScript 版本,也可以很容易地应用于 Java:

var result = /^\s*\[[^\]]*\]\s*$/.test('\t\n\r    [...very long string...] \t \r \n');
console.log('result: ' + result);

关于这个正则表达式的注释:

  • 使用锚(^$)只允许前导和尾随空格
  • 使用\s*而不是\s+因为使用后者您需要对空白空格进行OR测试
  • 使用快速回溯[^\]]*来避免昂贵的正则表达式.*

推荐阅读