java - 正则表达式匹配第一个新行后跟不间断空格字符

标签 java regex

我有一个多行字符串,其中包含换行符 (\n) 和不间断空格字符 (\u00A0),后者显示是为了便于阅读:

示例 1

dog  
\u00A0cat  
mat  

示例 2

bat  
can  
\u00A0boo

仅当“\n”的第一个实例后跟“\u00A0”时,我想返回 java 正则表达式匹配

因此:

  • 样本 1 会匹配。
  • 示例 2 不会,因为“bat”后的第一个“\n”后面是“can”而不是“\u00A0”。

我正在努力解决这个问题,我所能得到的只是通过一个简单的方法来匹配两个样本: \n\u00A0 如下面的屏幕截图所示。任何建议表示赞赏,我认为我需要使用负面的展望,但无法弄清楚如何。

谢谢。

Match as expected

Do not want a match

最佳答案

您可以使用

s.matches(".*\\R\\u00A0(?s).*")

正则表达式匹配

  • ^(隐含在 .matches 中)- 字符串开头
  • .* - 第一行
  • \\R - 换行符
  • \\u00A0 - 硬空间
  • (?s).* - 任何 0+ 字符,尽可能多(由于内联 (?s) DOTALL 修饰符而匹配换行符)<
  • \z(隐含在 .matches 中)- 字符串结尾

在 Java 7 及更早版本中,\R 应替换为 \u000D\u000A|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029] ,或者仅匹配 CR 和 LF 结尾,请使用 (?:\r\n?|\n)

Java demo :

String pattern = ".*\\R\\u00A0(?s).*";
System.out.println("dog\n\u00A0cat\nmat".matches(pattern));
System.out.println("bat\ncan\n\u00A0boo".matches(pattern));

输出:

true
false

使用 Matcher#find 的解决方案甚至更容易,因为您不必检查整个字符串的有效性,因此不必担心使用 Pattern.DOTALL 或类似 [^\n] 的模式:

String pat = "^.*\n\\u00A0";
Pattern p = Pattern.compile(pat);
Matcher m = p.matcher(s);
System.out.println(m.find());

关于java - 正则表达式匹配第一个新行后跟不间断空格字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49390990/

相关文章:

java - 尝试在空对象引用上调用接口(interface)方法'android.content.SharedPreferences $ Editor android.content.SharedPreferences.edit()'

java - WebDriver、ChromeDriver、Selenium 和 Jenkins 集成

python - 烂番茄URL上的正则表达式——排除词干

java - 线程 "main"java.util.regex.PatternSyntaxException : Unmatched closing 中出现异常

java - 如何在 perforce 中获取以前的修订版 CL

java - 如何创建所有子类的实例

ruby - 如何使用一行正则表达式来获取匹配的内容

regex - Vim 中的正则表达式

Javascript str.split(/[^a-zA-Z0-9.@]|(username|fname)/不从字符串中删除 'username' 或 'fname'

java - 如何创建具有父/子关系的@Entity