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

时间:2012-07-21 16:25:38

标签: php regex search preg-match str-replace

让我们说有一个字符串:

A quick brOwn FOX called F. 4lviN

我想要搜索的词语必须具备以下条件:

  • 包含MIXED Upper&小案
  • 仅包含字母A至Z(A-Z a-z)
    (例如:无数字,无逗号,无全停,无破折号等)

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

brOwn

因为它是唯一包含Upper&amp ;;内部小写字母(也只包含字母)。

那么如何让它在php中运行呢?

3 个答案:

答案 0 :(得分:5)

你应该善于:

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]); 

答案 1 :(得分:2)

Ω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);
?>

答案 2 :(得分:0)

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

/\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
    )

)

编辑:更改了模式。