假设有一个字符串,如:
A quick brOwn FOX called F. 4lviN
我要搜索的词必须满足以下条件:
- 包含混合大小写的单词
- 仅包含字母 A 到 Z (AZ az)
(例如:无数字、无逗号、无句号、无破折号 .. 等)
所以假设,当我搜索(例如在这个字符串中)时,搜索结果将是:
brOwn
因为它是唯一一个同时包含大写和小写字母的单词(也只包含字母)。
那么我怎样才能让它在php中工作呢?
假设有一个字符串,如:
A quick brOwn FOX called F. 4lviN
我要搜索的词必须满足以下条件:
所以假设,当我搜索(例如在这个字符串中)时,搜索结果将是:
brOwn
因为它是唯一一个同时包含大写和小写字母的单词(也只包含字母)。
那么我怎样才能让它在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
)
)
编辑:改变了模式。