正则表达式匹配第一个单词,直到第一个空格不包含UTF8字符串中的数字

时间:2016-01-27 11:59:06

标签: php regex pcre

要找到第一个单词直到第一个空格我使用正则表达式:

([^\s]+)

但是如何找到第一个单词,直到第一个空格不包含数字

例如字符串是:

  •   

    First12word50Secųond-WordTrindųword'结果必须是Secųond-Word

  •   

    First1-2word50Secųond/WordTrietųword'结果必须是Secųond/ Word

  •   

    First1 /2word50Secųond+WordTrietųword'结果必须是Secųond+ Word

  •   

    First1 /2word50Secųond1+ WordThirdų-word'结果必须为Thirdų-word

  •   

    First1 / 2word50Sec1ųond1+ WordThirdų-word'结果必须为Thirdų-word

  •   

    First1 / 2word50Sec1ųond1+WordToir11dų-word'结果必须为EMPTY

正则表达式([^\s(?<!\d)$]+)

仅返回

  

第一

1 个答案:

答案 0 :(得分:1)

您可以使用

private static String[] arrRemove(String[] strArray) {
    Set<String> set = new HashSet<String>();
    set.addAll((List<String>) Arrays.asList(strArray));
    return (String[]) set.toArray(new String[set.size()]);
} 

请参阅demo

正则表达式匹配:

  • ^(?:(?=\S*\d)\S+(?:\s+(?=\S*\d)\S+)*\W*)?\K\S* - 字符串的开头
  • ^ - 一次或零次出现(即可选)......
    • (?:(?=\S*\d)\S+(?:\s+(?=\S*\d)\S+)*\W*)? - 除了空格之外的一个或多个字符,应至少包含一位数字
    • (?=\S*\d)\S+ - 零个或多个序列......
      • (?:\s+(?=\S*\d)\S+)* - 一个或多个空白字符
      • \s+ - 同上。
    • (?=\S*\d)\S+ - 零个或多个非单词字符
  • \W* - 省略到目前为止匹配的缓冲区中的整个文本
  • \K - 零个或多个非空白字符

PHP code

\S*