我正在使用RegEx(php)找出哪些地址有一个或更少的大写字母。例如:
AV。 St Joan 128(不符合)
大道。 st joan 122(match)
AV。 St joan 212(比赛)
大道。 St.joan 121(不符合)
AV。 st joan 232(不匹配)
答案 0 :(得分:3)
使用preg_grep
:
$strings = [
'av. St Joan 128',
'Av. st joan 122',
'av. St joan 212',
'Av. St.joan 121',
'AV. st joan 232'
];
$results = preg_grep('~^[^A-Z]*[A-Z]?[^A-Z]*$~', $strings);
模式很简单,描述了整个字符串(使用锚点来表示字符串的开头和结尾)。
故障:
^ #match start of the string
[^A-Z]* #match zero or more (greedily) non-uppercase characters
[A-Z]? #match zero or one uppercase character
[^A-Z]* #match zero or more (greedily) non-uppercase characters
$ #match end of the string
意思是,字符串可能具有无限制的非大写字符,但大写字母只能出现零次或一次。如果模式找到第二个大写字符(任何地方),则立即失配/失败。
请注意,您还可以使用带有PREG_GREP_INVERT
选项的@bobblebubble模式排除匹配的字符串:
$result = preg_grep('~[A-Z][^A-Z]*[A-Z]~', $strings, PREG_GREP_INVERT);
答案 1 :(得分:1)
您希望使用PHP Preg_Match_all
来查找模式的所有出现。
您可以使用PCRE将模式定义为任何大写字母:
getRatesItemNamelist()
= A-Z A(索引65)和Z(索引90)之间范围内的单个字符(区分大小写)
示例:
Array.prototype.sortOnValue = function(key){
this.sort(function(a, b){
if(a[key] < b[key]){
return -1;
}else if(a[key] > b[key]){
return 1;
}
return 0;
});
}
var arr = [{country:'France', value:'0'},{country:'Italy', value:'3'},
{country:'England', value:'1'},
{country:'Germany', value:'2'}];
arr.sortOnValue("value");
console.log(arr);
我正在假设您正在使用每个字符串进行搜索 基础而非每行基础,例如,您的示例文本为5 每行一行。
答案 2 :(得分:0)
我假设你只需要模式而不是
php
代码,否则请评论我删除答案。
一个简单的否定先行断言:
^(?!.*[A-Z].*[A-Z]).*$
它不匹配任何超过一个大写字母的整行。
正如你评论的那样:
我需要一个正则表达式来找出哪个地址有一个或更少,即没有大写字母
它还匹配没有大写字母
所以它只匹配只有一个大写字母的行或匹配没有大写字母的行
输入:
av. St Joan 128 (Not maach) | more than one
Av. st joan 122 (match) | just one
av. St joan 212 (match) | just one
Av. St.joan 121 (Not match) | more than one
AV. st joan 232 (Not match) | more than one
av. tt joan 212 (match) | no one
输出是:
Av. st joan 122 (match) | just one
av. St joan 212 (match) | just one
av. tt joan 212 (match) | no one
^(?!.*[A-Z].*[A-Z]).*$
注意:
要反转匹配,您只需将?!
更改为?=
:
^(?=.*[A-Z].*[A-Z]).*$
它匹配:
av. St Joan 128 (Not maach) | more than one
Av. St.joan 121 (Not match) | more than one
AV. st joan 232 (Not match) | more than one