原文

http://www.cnblogs.com/jinsdu/p/4526858.htm

说起来,博主使用过的正则场景虽然不多,但是就是在这当中,我发现"\\s+"真好用!

详解 "\\s+"

正则表达式中\s匹配任何空白字符,包括空格、制表符、换页符等等, 等价于[ \f\n\r\t\v]

  • \f -> 匹配一个换页
  • \n -> 匹配一个换行符
  • \r -> 匹配一个回车符
  • \t -> 匹配一个制表符
  • \v -> 匹配一个垂直制表符

而“\s+”则表示匹配任意多个上面的字符。另因为反斜杠在Java里是转义字符,所以在Java里,我们要这么用“\\s+”.

那么问题来了,“\\s+”有啥使用场景呢?

API测试中,替换测试模板中的数据

在API自动化测试中,我们经常要用xml,或者json文件,来保存API payload。 比如下面这个模板:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<userInvite>
<toEmail>xxxx@gmail.com</toEmail>
<toUserId>%s</toUserId>
<fromUserId>%s</fromUserId>
<groupId>123</groupId>
<inviteMetadataId>1</inviteMetadataId>
<status>created</status>
<clilentId>xxxx</clilentId>
<inviteProperties>
  <inviteProperty>
    <key>key</key>
    <value>value</value>
  </inviteProperty>
  <inviteProperty>
    <key>subject</key>
    <value>is inviting you</value>
  </inviteProperty>
</inviteProperties>
</userInvite>

而在测试的时候,我们就经常要替换模板中的数据,去测试API的逻辑。比如我要去掉key为subject的inviteProperty, 然后再Call这个API,怎么办呢?

OK,答案很明显,我们只要替换他们就可以了,而这时候\\s+就可以派上用场了。

比如我们可以直接将其替换成空格:

payload.replaceFirst("<inviteProperty>\\s+<key>subject</key>\\s+<value>is inviting you</value>\\s+</inviteProperty>", "");

这里的\\s+可以替换掉关键字之间的所有空白字符。

\\s+在经典算法题:单词反转中的使用

有这么一个经典算法题:

输入一串字符,然后按着单词倒叙输出比如:
输入 "the sky is blue",
输出 "blue is sky the".

这题如果使用String的Split方法就非常方便,我们可以根据空格把字符串分成单词数组,这样就可以倒着输出单词就可以了。

但是如果单纯的使用空格就会有很多缺陷,比如:

s.trim().split(" ");

如果输入为这样就会有问题 “a b”,用上面的代码,我们就会分拆出下面的结果:

最后分解出了四个元素!

很明显跟我们的预期不一样,我们希望是只剩两个单词,所以如果使用\\s+,一切就完美多了!

最后给出完整算法解决方案:

public static String reverseWords(String s)
{
  String[] wordsArray = s.trim().split("\\s+");
  StringBuilder result = new StringBuilder();

  for(int i = wordsArray.length - 1; i >= 0 ; i--)
  {
      if(i == 0)
      {
        result.append(wordsArray[i]);
      }
      else
      {
      result.append(wordsArray[i] + " ");
      }
  }

  return result.toString();
}

出处 大卡的博客 [ http://www.cnblogs.com/jinsdu/ ]

正则表达式\\s+ - 匹配任意空白字符相关推荐

  1. 正则表达式“\\s+“ 匹配任意空白字符

    正则表达式中\s匹配任何空白字符,包括空格.制表符.换页符等等, 等价于[ \f\n\r\t\v] \f -> 匹配一个换页 \n -> 匹配一个换行符 \r -> 匹配一个回车符 ...

  2. php正则 网址,PHP正则表达式如何匹配任意类型网址

    PHP正则表达式匹配任意类型网址的方法:首先打开相应的代码文件:然后修改匹配网址的正则为"^((https?|ftp|news):\/\/)?([a-z]([a-z0-9\-]*[\..]) ...

  3. 正则表达式的匹配模式

    模式 描述 \w 匹配字母数字及下划线 \W 匹配非字母数字下划线 \s 匹配任意空白字符,等价于 [\t\n\r\f]. \S 匹配任意非空字符 \d 匹配任意数字,等价于 [0-9] \D 匹配任 ...

  4. Python Re 正则表达式 数据匹配提取 基本使用

    Python re 正则表达式 数据匹配提取 基本使用 小洲提示:代码可直接复制在编译器中运行,方便更好的理解 文章目录 Python re 正则表达式 数据匹配提取 基本使用 前言 一.导入库,内置 ...

  5. python正则表达式模糊匹配_python 正则表达式

    正则表达式的作用:用来匹配字符串 一.字符串方法 字符串提供的方法是完全匹配,不能进行模糊匹配 s = 'hello world' # 字符串提供的方法是完全匹配,不能进行模糊匹配 print(s.f ...

  6. VIM 用正则表达式,非贪婪匹配,匹配竖杠,竖线, 匹配中文,倒数第二列, 匹配任意一个字符 :...

    VIM 用正则表达式 批量替换文本,多行删除,复制,移动 在VIM中 用正则表达式 批量替换文本,多行删除,复制,移动 :n1,n2 m n3     移动n1-n2行(包括n1,n2)到n3行之下: ...

  7. perl正则表达式匹配任意单字符_PHP七天系列之正则表达式

    正则表达式 正则表达式被用来检索或替换那些符合某个模式的文本内容. 许多程序设计语言都支持利用正则表达式进行字符串操作.例如:JavaScript.PHP.ASP.JAVA.Perl.C#..NET. ...

  8. 正则匹配任意字符(常用正则表达式的书写)

    匹配中文字符的正则表达式: [\u4e00-\u9fa5] 评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符(包括汉字在内):[^\x00-\xff] 评注:可以用来计算字符串的 ...

  9. 关于正则表达式匹配任意字符

    关于正则表达式匹配任意字符 今天在Java中想使用正则表达式来获取一段文本中的任意字符.于是很随意得就写出如下匹配规则: (.*) 结果运行之后才发现,无法获得换行之后的文本.于是查了一下手册,才发现 ...

最新文章

  1. 8 一点就消失_微信富二代男友转账20w后,却在见面前一秒消失??...
  2. 腾讯视频手机app下载安装_腾讯视频怎么签到
  3. Java 字符串性能对比
  4. Windows Communication Foundation from msdn
  5. 基本BASH SHELL脚本命令——Linux系统管理命令-检测程序、检测磁盘空间
  6. Julia: Dict中元素的顺序:是无序的!
  7. php单例模式详解,PHP 单例模式解析和实战
  8. 机器学习(周志华) 第八章集成学习
  9. SiamFC代码讲解,推理测试讲解
  10. css如何修改行内样式
  11. 工程矩阵理论 Hermite 矩阵
  12. 如何将ape无损音转码为wav文件
  13. 六万字带你一次性速通python爬虫基础
  14. Appium基础 — uiautomatorviewer定位工具
  15. UE4中的玩家类UPlayer、ULocalPlayer 和 UNetConnection
  16. python音乐可视化壁纸_Python 制作一个漂亮的音乐节奏可视化效果
  17. 智能小区监控、报警、灯光联动三位一体安全防范系统
  18. Jdeveloper 10g开发体验之二
  19. Docker创建容器找不到网卡:Error response from daemon: network xxxx not found
  20. 【专题5: 硬件设计】 之 【4.DC-DC/直流降压模块(LM7805降压模块)】

热门文章

  1. IDEA的配置设置及使用
  2. linux系统yum 安装postgresql
  3. AutoLeaders控制组——51单片机学习笔记(蜂鸣器、AT24C02芯片)
  4. POJ_1849 Two
  5. canvas图形操作(缩放、旋转、位移)
  6. html根据PC手机设置不同背景图,Html-根据不同的分辨率设置不同的背景图片
  7. 图形学扫描线填充算法
  8. Navicat Premium 12的过期激活,问题解决的心路历程
  9. ARM学习之基本概念
  10. 测试用例之性能测试用例