java - 正则表达式 java 检查开始 [ 和结束 ] 但可能有 \t\r\n 在开始和结束
问题描述
我需要检查一个字符串是否以开头[
和结尾,]
但在方括号之前/之后允许空格。
我可以使用trim()
,然后检查结束字符,但字符串可能很长(超过 100,000 个字符),因此创建新的修剪字符串可能会很昂贵。我想知道在大字符串大小的情况下提供合理性能的最佳方法是什么。
应该通过的示例输入:
"\t\n\r [ (very long string) ] \t \r \n"
使用正则表达式,我有以下表达式,但不知道它是否绝对正确,或者它是否会表现良好。
(^|\s+)\[((.*)|\s)+\]($|\s+)
解决这个问题的最佳方法是什么?
解决方案
这是一个快速的 JavaScript 版本,也可以很容易地应用于 Java:
var result = /^\s*\[[^\]]*\]\s*$/.test('\t\n\r [...very long string...] \t \r \n');
console.log('result: ' + result);
关于这个正则表达式的注释:
- 使用锚(
^
和$
)只允许前导和尾随空格 - 使用
\s*
而不是\s+
因为使用后者您需要对空白空格进行OR测试 - 使用快速回溯
[^\]]*
来避免昂贵的正则表达式.*
推荐阅读
- r - 如何找到两个字符串之间的所有子字符串,包括使用 R 的换行符?
- powershell - 如何让当前脚本从位于 c:\ 的 txt 文件中读取计算机名称
- apache-kafka - 为什么这个例子不会导致脏读?
- c# - 为什么 C# 没有从 Action 委托中删除侦听器?
- python - 添加新列比较日期
- java - 如何在控制台输出中添加间距
- apache - htaccess 如何更改 url 以指向虚拟主机?
- python - 根据关键词 Pandas DF 提取列名
- c++ - Qt:我应该如何动态地将信号路由到适当的对象?
- kubernetes - 无法删除 Kubernetes 对象:未注册任何种类的“GetOptions”