我有以下模式:
<* ab: cdef *>
<************>
abc: <starting now>
我需要转义具有&lt; * pattern。
的行我使用\\*
和\\\\*
来逃避\和*。但这不起作用
如何使用Java转义正则表达式中的*?
我无法逃脱线条有&lt;单独,因为其他行也将被跳过。
我使用了以下代码:
if(str.matches("<\\*.*")) {
//Do nothing.
}
使用BufferedReader初始化str,如下所示:
FileInputStream fstream = new FileInputStream(filename);
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
String str = br.readLine();
答案 0 :(得分:3)
要在正则表达式中转义*
,您需要使用双反斜杠\\*
,因为*
是正则表达式中的特殊字符。
你也可以试试这个(如果你希望这个模式出现在行的开头,就像在你的例子中一样):
if (str.trim().startsWith("<*")) {
//your code
}
因此,如果您希望模式出现在字符串中的任何位置,您可以使用:
if (str.contains("<*")) {
//your code
}
而且我很确定你不需要这些简单案例的正则表达式。
答案 1 :(得分:2)
您还应该在&#39;&lt;&#39;之前匹配空格。字符,如
var app=angular.module('hz',[]);
app.controller('ceilometerCtrl', function($scope, $http){
//$scope.name="Neelabh";
$http.get("data.json")
.success(function(response){
$scope.metrics=response.nova_meters.concat(response.glance_meters);
$scope.metric = $scope.metrics[0];
$scope.groups=[{"name": "Project", "label": "Project"}];
$scope.group_by = $scope.groups[0];
//$scope.group_by=$scope.groups[0];
});
$scope.stats_attrs=[
{
"name": "Avg",
"label": "Avg"
},
{
"name": "Min",
"label": "Min"
},
{
"name": "Max",
"label": "Max"
},
{
"name": "Sum",
"label": "Sum"
},
];
$scope.stats_attr = $scope.stats_attrs[0];
$scope.date_options=[
{
"value" : 1,
"label" : "Last day"
},
{
"value" : 7,
"label" : "Last week"
},
{
"value" : 23,
"label" : "Month to date"
},
{
"value" : 30,
"label" : "Last 30 days"
},
{
"value" : 356,
"label" : "Last year"
},
{
"value" : "Other",
"label" : "Other"
}
];
$scope.date_option = $scope.date_options[1];
});
或if(str.trim().matches("<\\*.*")) {
//Do nothing.
}
。
您还应该迭代地阅读下一行,例如:
str.matches("\\s*<\\*.*")
(从OP中不清楚)
答案 2 :(得分:1)
可能认为该模式不匹配,因为调试器无法在空的if
块内停止 - 什么都不做总是不好的做法:做某事而不是!
您的模式已经符合以下情况:
String str = "<* ab: cdef *>";
if(str.matches("<\\*.*")) {
//do something
System.out.println("matches");
}
以上打印匹配。
如果您不希望考虑额外的前导空格,可以使用匹配零个或多个前导空白字符的此模式" *<\\*.*"
。