有人能用以下格式给我一个正则表达式吗?我尝试了一些但没有运气。
格式适用于以下时间:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_inner_basics) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
int[] screenSize= getScreenSIze(); //This is the method above remember
int width=screenSize[0];
int height=screenSize[1];
int webViewWidth=(int)(0.8*width); //Casting to make them int
int webViewHeight=(int)(0.7*height);
android.webkit.WebView wv = new WebView(this);
wv.setMinimumHeight(webViewHeight);
wv.setMinimumWidth(webViewWidth);
wv.loadUrl("file:///android_asset/test.html");
builder.setView(wv);
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.show();
}
return super.onOptionsItemSelected(item);
}
它不应该匹配
07:00 AM
12:00 PM
时间始终为7:00
7:00 AM
等
谢谢!
答案 0 :(得分:1)
你可以用这个:
\d{2}:\d{2}\s(?:AM|PM)
符合此时间格式:hh:mm [AM|PM]
但不匹配:h:mm
或h:mm [AM|PM]
这是以上的正则表达式示例:
https://regex101.com/r/IFsyH1/1
注意:如果您不希望[AM | PM]区分大小写,只需添加i
标记。
答案 1 :(得分:0)
由于你没有指定语言/正则表达式的味道,我会假设一切都!
(?i)((?:0[1-9]|1[0-2]):[0-5]\d\s*[AP]M)\s+(?-1)
注意:如果这是字符串的唯一内容,您可以在开头添加^
,在字符串末尾添加$
。如果这是较大字符串的内容,我建议将正则表达式包装在单词边界\b
中,以确保匹配之前/之后的内容不是单词字符(a-zA-Z0-9_
)。
07:00 AM 12:00 PM
7:00 7:00 AM
注意:以下输出仅显示
以上输入的匹配项07:00 AM 12:00 PM
(?i)
将模式的其余部分与i
标志((?:0[1-9]|1[0-2]):(?:[0-5]\d)\s*[AP]M)
将以下内容捕获到第一个捕获组中
(?:0[1-9]|1[0-2])
匹配以下任一项(任何有效小时)
0[1-9]
匹配0
,后跟1-9
(01
至09
)范围内的数字1[0-2]
匹配1
,后跟0-2
(10
至12
)范围内的数字:
字面上匹配冒号字符[0-5]\d
匹配0-5
范围内的数字,后跟任意数字(分钟范围从00
到59
)\s*
匹配任意数量的空白字符(您可以将此更改为\h*
以获取PCRE正则表达式中的水平空格或[ \t]
,以便更常用,仅接受空格或制表符)[AP]M
匹配AM
或PM
(使用i
修饰符,这也会匹配任何组合,包括小写字符,例如am
,{{ 1}},Am
)aM
匹配一个或多个空格字符(与之前的\s+
相同的规则可应用于此)\s*
递归第一个子模式(确保第二个时间戳存在)看到你现在如何编辑你的问题以更好地显示输入/输出期望,我将编辑我的答案。它与我上面的内容非常相似,只是没有结尾,所以解释仍然正确地解释了这个正则表达式。
(?-1)
注意:这会使用(?:0[1-9]|1[0-2]):[0-5]\d\s*[AP]M
修饰符(或者您可以将i
添加到正则表达式中以使其不区分大小写)
(?i)
注意:以下输出仅显示
以上输入的匹配项07:00 AM
12:00 PM
7:00
7:00 AM