我支持这个Java应用程序,其中开发人员基于RegEx实现了一些过滤.为了尽可能通用,他们使用MULTILINE标志编译模式.
前几天我发现了一些意外的事情.在Java中,模式与MULTILINE标志"^\\s*$"
不匹配""
.它没有那个标志就匹配了.
Pattern pattern = Pattern.compile("^\\s*$", Pattern.MULTILINE);
Matcher matcher = pattern.matcher("");
System.out.println("Multiline: "+matcher.find());
pattern = Pattern.compile("^\\s*$");
matcher = pattern.matcher("");
System.out.println("No-multiline: "+matcher.find());
Run Code Online (Sandbox Code Playgroud)
这会产生以下输出
Multiline: false
Non-Multiline: true
Run Code Online (Sandbox Code Playgroud)
可以看到相同的结果matches()
:
System.out.println("Multiline: " + ("".matches("(?m)^\\s*$")));
System.out.println("No-multiline: " + ("".matches("^\\s*$")));
Run Code Online (Sandbox Code Playgroud)
我希望所有案例都能匹配.
在Python中,情况就是这样.这个:
import re
print(re.search(r'^\s*$', "", re.MULTILINE))
print(re.search(r'^\s*$', ""))
Run Code Online (Sandbox Code Playgroud)
得到:
<_sre.SRE_Match object; span=(0, 0), match=''>
<_sre.SRE_Match object; span=(0, 0), match=''>
Run Code Online (Sandbox Code Playgroud)
在Perl中,两个案例都匹配,我想我记得它与PHP相同.
如果有人能解释Java处理这种情况的原因,我真的很感激.
我有以下代码,适用于普通工作表,但是当我尝试右键单击表格时,宏不会出现。
我已尝试以下操作,但在第一行收到“需要对象”错误消息:
With ContextMenuListRange.Controls.Add(Type:=msoControlButton, before:=2)
.OnAction = "'" & ThisWorkbook.Name & "'!" & "macro"
.Caption = "macro"
.Tag = "My_Cell_Control_Tag"
End With
Run Code Online (Sandbox Code Playgroud)
下面的内容适用于普通工作表。
With ContextMenu.Controls.Add(Type:=msoControlButton, before:=2)
.OnAction = "'" & ThisWorkbook.Name & "'!" & "macro"
.Caption = "macro"
.Tag = "My_Cell_Control_Tag"
End With
Run Code Online (Sandbox Code Playgroud)
右键单击表格时如何显示?