Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Ruby中包含给定字符串的单词_Ruby On Rails_Ruby_Regex_String - Fatal编程技术网

Ruby on rails Ruby中包含给定字符串的单词

Ruby on rails Ruby中包含给定字符串的单词,ruby-on-rails,ruby,regex,string,Ruby On Rails,Ruby,Regex,String,我正在编写一个小Rails api应用程序,我需要分析字符串以找到给定字符串的单词,如: 假设我的源文本是您好先生一二三四九一九,我想检查在上的出现情况,它将生成:one,如果我在同一字符串中检查ne t的出现情况,它将生成one-two 我知道用子字符串、计算位置和解析字符串的方法很难看,但我认为用正则表达式扫描可以解决这个问题 如果您需要其他信息,请说,谢谢。使用正则表达式: search = "on" /\s([^\s]*#{search}.[^\s]*)\s/.match("hello

我正在编写一个小Rails api应用程序,我需要分析字符串以找到给定字符串的单词,如:

假设我的源文本是
您好先生一二三四九一九
,我想检查
上的出现情况,它将生成:
one
,如果我在同一字符串中检查
ne t
的出现情况,它将生成
one-two

我知道用子字符串、计算位置和解析字符串的方法很难看,但我认为用正则表达式扫描可以解决这个问题


如果您需要其他信息,请说,谢谢。

使用正则表达式:

search = "on"
/\s([^\s]*#{search}.[^\s]*)\s/.match("hello mr one two three four nine nineteen")[1]
#  returns "one"

search = "ne t"
/\s([^\s]*#{search}.[^\s]*)\s/.match("hello mr one two three four nine nineteen")[1]
#  returns "one two"
它的工作方式是找到您要查找的子字符串,然后将附加到子字符串两端的任何附加字符分组,并在两端的第一个空格处停止

▶ str = 'hello mr one two three four nine nineteen'
#⇒ "hello mr one two three four nine nineteen"
▶ re = ->(pattern) { /\p{L}*#{pattern}\p{L}*/ }
▶ str[re.('ne t')]
#⇒ "one two"
▶ str[re.('on')]
#⇒ "one"
通常优于
\w
,尤其是
\S
,因为它匹配所有utf-8字母

为了匹配重音字母(即在“naỉve”中组合的
),应该扩展左匹配符和右匹配符:

▶ re = ->(pattern) { /[\p{L}\p{Mc}]*#{pattern}[\p{L}\p{Mc}]*/ }
请注意,上面的代码将返回第一个匹配项。要返回所有匹配项,请使用
String 35; scan
而不是
String[]

▶ str.scan re.('ni')
#⇒ ["nine", "nineteen"]

[^\s]
将被写成
\s
,您的解决方案将匹配标点、逗号、点等。除此之外,它不会匹配字符串开头的单词(“给出的示例中的hello”)和字符串结尾的单词(“十九”),这个解决方案既不健壮,也不正确……或者放入一个方法:
defmatch(str,pattern);str[/[\p{L}\p{Mc}]*.{pattern}[\p{L}\p{Mc}]*/];结束
。谢谢你,卡里,谢谢你!