我正在尝试使用sed替换以下格式的电话号码:
1(123)456-7890
+
和以下1
是可选的。其他数字是任意的,但格式必须相同(即+1(123)456-7890,1(321)456-0987,(222)555-9900应匹配)
我在this问题中读到我需要使用扩展正则表达式选项,或者如果我想将它们用作{
}
和?
,则要转义所有出现的--regexp-extended
sed 's/+\?1\?([0-9]\{3\})[0-9]\{3\}-[0-9]\{4\}/test/g'
和sed 's/([0-9]\{3\})[0-9]\{3\}-[0-9]\{4\}/test/g'
特殊字符。由于我的sed版本中没有+1
,因此我选择转义特殊字符。
这是我到目前为止所尝试的:
+
与我指定的格式编号不匹配。
我能得到的最接近的是:
1
这匹配(222)555-9900之类似,但显然与开头的<!-- confirm password -->
<div class="row">
<div class="col-xs-10 col-centered">
<div class="col-md-5 col-xs-12 inputLabels">
<b>Confirm Password:</b>
</div>
<div class="col-md-5 col-xs-12">
<input type="password" name="confirmPassword" ng-model="boardingData.confirmPassword" class="form-control" required compare-to="boardingData.password">
</div>
</div>
</div>
或app.directive('compareTo', function() {
return {
require: "ngModel",
scope: {
otherModelValue: "=compareTo"
},
link: function(scope, element, attributes, ngModel) {
ngModel.$validators.compareTo = function(modelValue) {
return modelValue == scope.otherModelValue;
};
scope.$watch("otherModelValue", function() {
ngModel.$validate();
});
}
};
或input:valid {box-shadow: 0 0 3px rgb(97, 240, 59);}
的数字不匹配。
我有点失落,因为我已经尝试了很多不同的方法来匹配前面表达式的0或1,但没有一种方法有效。
以防它可能会有所帮助:我使用的是预装在Macbook上的sed。
答案 0 :(得分:0)
您可以将*
或\?
应用于群组。例如:\(abc\)\?
表示“文本'abc'可以存在或不存在”。
对于您的情况,解决方案是:
sed 's/\(+\?1\)\?([0-9]\{3\})[0-9]\{3\}-[0-9]\{4\}/test/'
或
sed -E 's/(\+?1)?\([0-9]{3}\)[0-9]{3}-[0-9]{4}/test/'
顺便说一句,在Macbook中你有BSD sed。在linux中通常使用GNU sed(它也支持'-E'标志作为'-r'的别名)。所以最好总是使用'-E'来实现可移植性。