PHP搜索字符串中的大写+小写混合词


PHP to SEARCH the Upper+Lower Case mixed Words in the strings?

假设有一个字符串,如:

A quick brOwn FOX called F. 4lviN

我想搜索的单词必须满足以下条件:

  • 包含MIXED Upper&小写
  • 仅包含字母A到Z(A-Z A-Z)
    (例如:无数字、无逗号、无句号、无短划线等)

所以假设,当我搜索(例如在这个字符串中)时,搜索结果将是:

brOwn

因为它是唯一同时包含Upper&里面有小写字母(也只包含字母)

那么,我如何使它在php中工作呢?

你应该擅长:

preg_match_all("/'b([a-z]+[A-Z]+[a-zA-Z]*|[A-Z]+[a-z]+[a-zA-Z]*)'b/", $input, $matches);
print_r($matches[1]); 

编辑:由于不需要捕获,因此也可以>>

preg_match_all("/'b(?:[a-z]+[A-Z]+[a-zA-Z]*|[A-Z]+[a-z]+[a-zA-Z]*)'b/", $input, $matches);
print_r($matches[0]); 

Ωmega的回答很好。只是为了好玩,这里有一个替代的(注释的)正则表达式,它使用前瞻性来完成任务:

<?php // test.php Rev:20120721_1400
$re = '/# Match word having both upper and lowercase letters.
    'b               # Assert word begins on word boundary.
    (?=[A-Z]*[a-z])  # Assert word has at least one lowercase.
    (?=[a-z]*[A-Z])  # Assert word has at least one uppercase.
    [A-Za-z]+        # Match word with both upper and lowercase.
    'b               # Assert word ends on word boundary.
    /x';
$text ='A quick brOwn FOX called F. 4lviN';
preg_match_all($re, $text, $matches);
$results = $matches[0];
print_r($results);
?>

您可以使用一个简单的正则表达式,例如:

/'s[A-Z][a-z]+'s/

可以这样使用:

preg_match_all('/'s[A-Z][a-z]+'s/', 'A quick Brown FOX called F. 4lvin', $arr);

然后,已经添加了所有匹配项的$arr变量将包含一个单词数组:

Array
(
    [0] => Array
    (
        [0] => Brown
    )
)

编辑:改变了模式。