这是作业。如果正在执行此任务的其他人发现此代码,请不要复制它。
编辑:道歉,因为这项工作现在可以复制了,请相信我,我会向我的教授询问他对此事的看法。
所以我有一些文件包含这样的内容
public Test();
Code:
Stack=1, Locals=1, Args_size=1
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
LineNumberTable:
line 3: 0
public static void main(java.lang.String[]);
Code:
Stack=3, Locals=3, Args_size=1
0: new #2; //class java/util/Scanner
3: dup
4: getstatic #3; //Field java/lang/System.in:Ljava/io/InputStream;
7: invokespecial #4; //Method java/util/Scanner."<init>":(Ljava/io/InputStream;)V
10: astore_1
11: aload_1
12: invokevirtual #5; //Method java/util/Scanner.nextLine:()Ljava/lang/String;
15: astore_2
16: getstatic #6; //Field java/lang/System.out:Ljava/io/PrintStream;
19: aload_2
20: invokestatic #7; //Method add_periods:(Ljava/lang/String;)Ljava/lang/String;
23: invokevirtual #8; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
26: return
LineNumberTable:
line 6: 0
line 8: 11
line 9: 16
line 10: 26
我试图将输出分开,以便第一个输出如下。
public Test();
Code:
Stack=1, Locals=1, Args_size=1
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
LineNumberTable:
line 3: 0
,第二个输出是第二个方法。假设我不能使用双重新行字符作为分隔符使用拆分,因为这里未显示的某些输出将被抓取,我宁愿不抓取。
我的正则表达式如下所示。
files.scan(/.*\)\;\n(.+\n)*/)
正则表达式尝试执行的操作如下:
正则表达式.*\)\;
的第一部分试图匹配方法名称,它工作正常。
第二部分应该匹配它后面的每一行并停止,直到它看到一个双重新行字符,在哪个阶段它失败,因为有一个双新行字符。
它返回的是每个方法的最后一行,我不知道为什么。
python中的相同正则表达式如下所示获取整段代码,但这不是
ANSWER=re.search(r'.*\);\n(.+\n)*', STRING)
有人可以解释为什么它不起作用吗?
因为这是一项任务,请不要给出代码来解决我想要做的问题。我很感激,谢谢。
答案 0 :(得分:0)
我在Python中测试了它,它的工作方式与Ruby相同。捕获组1的内容是最后一行(ANSWER.group(1)
)。也许你检查了ANSWER.group(0)
那里你会找到与模式匹配的完整部分。我没有看到Ruby的扫描方法具有此功能ruby-doc。
如果你有一个带有量词的捕获组,那么在该组中总会有最后一个与该组匹配的东西。
所以我的想法是显式捕获第一行,然后使用非捕获组捕获其余非空行。
答案 1 :(得分:0)
问题是如果有任何组,scan
只返回一组数组匹配(正则表达式的括号部分)。要避免括号内的部分成为一个组,您可以修改正则表达式以使用(?:...)
而不是(...)
。 scan
将返回整个匹配的数组。
或者,您可以通过变量scan
,$1
,...和{{}向$2
移交有权访问群组以及整个匹配的$&
{1}}。