Я использую:рубин соответствия регулярного выражения перекрывающихся термины
r = /(hell|hello)/
"hello".scan(r) #=> ["hell"]
, но я хотел бы получить [ "hell", "hello" ]
.
http://rubular.com/r/IxdPKYSUAu
Я использую:рубин соответствия регулярного выражения перекрывающихся термины
r = /(hell|hello)/
"hello".scan(r) #=> ["hell"]
, но я хотел бы получить [ "hell", "hello" ]
.
http://rubular.com/r/IxdPKYSUAu
Вы можете использовать любитель захвата:
'hello'.match(/((hell)o)/).captures
=> ["hello", "hell"]
Это действительно фантазия :-) –
Нет, регулярные выражения не работают, как это. Но вы можете сделать что-то вроде этого:
terms = %w{hell hello}.map{|t| /#{t}/}
str = "hello"
matches = terms.map{|t| str.scan t}
puts matches.flatten.inspect # => ["hell", "hello"]
Вы могли бы сделать что-то вроде этого:
r = /(hell|(?<=hell)o)/
"hello".scan(r) #=> ["hell","o"]
Это не даст вам ["hell", "hello"]
, а ["hell", "o"]
Ну, вы всегда можете взять из общего подвыражения. То есть, следующие работы:
r = /hello{0,1}/
"hello".scan(r) #=> ["hello"]
"hell".scan(r) #=> ["hell"]
Или используйте более простой '/ hello? /' –
Либо проверить его дважды, или выяснить, какие строки содержат друг друга и вычислить соответствует себя после проверки только самый длинный – klochner