Is there an easier way to get a match before a position in a string?

Discussion in 'Ruby' started by Michael W. Ryder, Jan 21, 2008.

  1. I am trying to find an easier way to split a string into printable
    lines. I could use the method of checking for a space using a loop and
    going back from the desired length or I could use the following:

    def strbrk(str, len)
    if str.length <= len
    return str.length
    tmp = str[0...len].reverse
    x = tmp =~ / /
    if x == nil
    return -1
    return len - x

    I could not find any way to get a regexp to search from the end of the
    string which would have eliminated the need to reverse the string.
    Michael W. Ryder, Jan 21, 2008
    1. Advertisements

  2. Michael W. Ryder

    George Guest

    str.rindex(/ /, len) ?
    George, Jan 21, 2008
    1. Advertisements

  3. Michael W. Ryder

    yermej Guest

    This should work:

    / [^ ]*$/

    It looks for one space, followed by 0 or more occurrences of anything
    besides a space, followed by the end of the string.
    yermej, Jan 21, 2008
  4. def str_break( str, len )
    str.size > len and str[0..len].rindex(' ') or str.size

    str = "\
    I don't necessarily need code examples -- but if anyone has
    ideas for a best approach to specifying a line wrap width
    (breaking between words for lines no longer than a specific
    column width) for output from a Ruby script, I'd love to
    hear about it."

    X = 40
    puts str.gsub(/\n/," ").scan(/\S.{0,#{X-2}}\S(?=\s|$)|\S+/)
    William James, Jan 21, 2008
  5. This is much better than my solution, I missed rindex somehow.
    Michael W. Ryder, Jan 21, 2008
  6. William James wrote:
    Kaspar Schiess wrote text-reform (gem install text-reform)

    require 'text/reform'

    r =
    while line=gets
    puts r.format('['*40, line)

    Here he says it does hyphenate:
    Siep Korteling, Jan 21, 2008
  7. I did find one more "improvement" on your code after reading further on

    def str_break( str, len )
    str.size > len and str.rindex(' ', len) or str.size

    It appears to work the same and give the same results but I am not sure
    if there was a reason for the way you did it that I missed.
    Thanks for the push in the right direction.
    Michael W. Ryder, Jan 21, 2008
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.