我有一个字符串变量,内容如下:
varMessage =
"hi/thsid/sdfhsjdf/dfjsd/sdjfsdn\n"
"/my/name/is/balaji.so\n"
"call::myFunction(int const&)\n"
"void::secondFunction(char const&)\n"
.
.
.
"this/is/last/line/liobrary.so"
在上面的字符串中我必须找到一个子字符串,即
"hi/thsid/sdfhsjdf/dfjsd/sdjfsdn\n"
"/my/name/is/balaji.so\n"
"call::myFunction(int const&)\n"
我该怎么找到它?我只需要确定子串是否存在 .
9 回答
扩展Clint Pachl的答案:
当表达式不匹配时,Ruby中的正则表达式匹配返回 nil . 如果是,则返回匹配发生的字符的索引 . 例如
重要的是要注意,在Ruby中只有nil和布尔表达式false求值为false . 其他所有内容(包括空数组,空哈希或整数0)的计算结果为true .
这就是为什么上面的/ foo /示例有效,以及为什么
按预期工作 . 如果匹配发生,仅输入if块的“true”部分 .
你也可以这样做......
如果情况无关紧要,那么 case-insensitive regular expression 是一个很好的解决方案:
这也适用于多行字符串 .
请参阅Ruby的Regexp类 .
您可以使用include?方法:
三元方式
要么
当你说'check'时,我假设你想要一个返回的布尔值,在这种情况下你可以使用String#match? .
match?
接受字符串或正则表达式作为其第一个参数,如果's the former then it'自动转换为正则表达式 . 所以你的用例是:String#match?
具有可选的第二个参数的附加好处,该参数指定从中搜索字符串的索引 . 默认情况下,它设置为0
.比 Rails (3.1.0及以上版本)中提供的上述接受的答案更为简洁的成语是
.in?
.例如:
我也认为它更具可读性 .
C.F. http://apidock.com/rails/v3.1.0/Object/in%3F
(请注意,它仅在 Rails 中可用,而不是纯Ruby . )
这将帮助您检查字符串是否包含子字符串
您可以使用String Element Reference方法
[]
[]
内部可以是文字子字符串,索引或正则表达式:由于
nil
在功能上与false
相同,并且从[]
返回的任何子字符串都是true
,因此您可以像使用.include?
方法一样使用逻辑:只需确保不要将索引与子字符串混淆:
你也可以使用正则表达式: