0

接受的示例:

This is a try!
And this is the second line!

不接受的示例:

      this is a try with initial spaces
and this the second line

所以,我需要:

  • 没有仅由空格“”组成的字符串
  • 没有第一个字符是空格的字符串
  • 新线没问题;只有第一个字符不能是新行

我正在使用

^(?=\s*\S).*$

但这种模式不允许换行。

4

3 回答 3

2

你可以试试这个正则表达式

^(?!\s*$|\s).*$
    ---- -- --
      |   |  |->matches everything!
      |   |->no string where first char is whitespace
      |->no string made only by whitespaces

你需要使用singleline模式..


你可以在这里试试..你需要使用matches方法

于 2013-01-05T13:43:44.733 回答
2

“没有仅由空格组成的字符串”与“没有第一个字符为空格的字符串”相同,因为它也以空格开头。

您必须设置Pattern.MULTILINE将 ^ 和 $ 的含义更改为行首和行尾,而不仅仅是整个字符串

"^\\S.+$"
于 2013-01-05T13:49:42.230 回答
0

我不是 Java 人,但 Python 中的解决方案可能如下所示:

In [1]: import re

In [2]: example_accepted = 'This is a try!\nAnd this is the second line!'

In [3]: example_not_accepted = '   This is a try with initial spaces\nand this the second line'

In [4]: pattern = re.compile(r"""
  ....:     ^     # matches at the beginning of a string
  ....:     \S    # matches any non-whitespace character
  ....:     .+    # matches one or more arbitrary characters
  ....:     $     # matches at the end of a string
  ....:     """,
  ....:     flags=re.MULTILINE|re.VERBOSE)

In [5]: pattern.findall(example_accepted)
Out[5]: ['This is a try!', 'And this is the second line!']

In [6]: pattern.findall(example_not_accepted)
Out[6]: ['and this the second line']

这里的关键部分是 flag re.MULTILINE。启用此标志后,^不仅$匹配字符串的开头和结尾,还匹配由换行符分隔的行的开头和结尾。我敢肯定Java也有类似的东西。

于 2013-01-05T14:20:46.080 回答