在 Squeak (Smalltalk) 中提取 return 值
Extracting the return value in Squeak (Smalltalk)
我想从表示方法的给定文本中提取 return 值。
例如:
g: x and: y
Transcript show: x; show: y.
^x+y.
所以为了解决我使用了正则表达式:
\^\s*(\w+.*).
当我 运行 在某些正则表达式网站上使用它时,它似乎可以正常工作并做我想做的事,例如:https://regex101.com/
但是当我 运行 下面的程序时,它似乎发出 returns nil
的声音(找不到匹配项)。我怀疑这是因为我使用的是字符 ^
.
但我转义了那个字符,所以我不知道为什么它不起作用。
我用来测试的代码:
|aString regexObj |
aString := 'g: x and: y
Transcript show: x; show: y.
^x+y.'.
regexObj := '\^\s*(\w+.*).' asRegex.
regexObj matches: aString.
returnedType:= (regexObj subexpression:2).
Transcript show: returnedType.
谁知道为什么,如何解决?
谢谢。
您需要将方法从 matches
替换为 search
。见 139.6. Matching:
matches: aString
— true if the whole argument string (aString
) matches.
和
search: aString
— Search the string for the first occurrence of a matching substring. Note that the first two methods only try matching from the very beginning of the string. Using the above example with a matcher for a+
, this
method would answer success given a string 'baaa'
, while the previous two would fail.
前两种方法指的是matches
(需要全字符串匹配)和matchesPrefix
(将匹配锚定在输入的开头细绳)。 search
允许在字符串中的任意位置匹配模式 。
关于正则表达式的注意事项:最后的 .
未转义并匹配任何非换行字符。您应该将其转义以匹配文字点:
'\^\s*(\w.*)\.'
参见regex demo。
此外,\s
跨行匹配。如果您不需要它,请将 \s
替换为 \h
(一种仅匹配水平空格的 PCRE 模式)。注意 .*
模式:它将匹配除换行字符以外的任何 0+ 个字符,因为 many 可能,因此,它将匹配到最后一个 .
在匹配行上。
我想从表示方法的给定文本中提取 return 值。
例如:
g: x and: y
Transcript show: x; show: y.
^x+y.
所以为了解决我使用了正则表达式:
\^\s*(\w+.*).
当我 运行 在某些正则表达式网站上使用它时,它似乎可以正常工作并做我想做的事,例如:https://regex101.com/
但是当我 运行 下面的程序时,它似乎发出 returns nil
的声音(找不到匹配项)。我怀疑这是因为我使用的是字符 ^
.
但我转义了那个字符,所以我不知道为什么它不起作用。
我用来测试的代码:
|aString regexObj |
aString := 'g: x and: y
Transcript show: x; show: y.
^x+y.'.
regexObj := '\^\s*(\w+.*).' asRegex.
regexObj matches: aString.
returnedType:= (regexObj subexpression:2).
Transcript show: returnedType.
谁知道为什么,如何解决?
谢谢。
您需要将方法从 matches
替换为 search
。见 139.6. Matching:
matches: aString
— true if the whole argument string (aString
) matches.
和
search: aString
— Search the string for the first occurrence of a matching substring. Note that the first two methods only try matching from the very beginning of the string. Using the above example with a matcher fora+
, this method would answer success given a string'baaa'
, while the previous two would fail.
前两种方法指的是matches
(需要全字符串匹配)和matchesPrefix
(将匹配锚定在输入的开头细绳)。 search
允许在字符串中的任意位置匹配模式 。
关于正则表达式的注意事项:最后的 .
未转义并匹配任何非换行字符。您应该将其转义以匹配文字点:
'\^\s*(\w.*)\.'
参见regex demo。
此外,\s
跨行匹配。如果您不需要它,请将 \s
替换为 \h
(一种仅匹配水平空格的 PCRE 模式)。注意 .*
模式:它将匹配除换行字符以外的任何 0+ 个字符,因为 many 可能,因此,它将匹配到最后一个 .
在匹配行上。