class1
次の文字列の、class2
、およびに一致する正規表現で問題が発生していclass3
ます (理想的には、メソッドに渡されるクラスの数が一定ではないため、パイプで区切られたn個の単語を持つことができます)
class1|class2|class3 path/to/resource
のみを返す次のマッチャーがありますclass1
。ボーナスポイントは、リソースパスのマッチャーも見つけてくれる人です。
編集
すべての助けに感謝します - 至る所にポイントがあります!
入力の形式が適切であると確信している場合、パイプ文字とスペースの両方で文字列を分割することをお勧めします。例えば:
components = "class1|class2|class3 path/to/resource".split(/[ \|]/)
次に、n 個のコンポーネントを含む配列にアクセスし、その後に操作してアクセスできるリソースへのパスを指定します。
resourcePath = components.pop()
classes = components
編集:これの元のトピックは、OPがRubyを使用していることを示唆していたため、私の答えです。
指定した入力で正規表現を使用する場合、これによりクラスとパスが抽出されます。
([\w/]+)\|? ?
入力
class1|class2|class3 path/to/resource
出力
class1
class2
class3
path/to/resource
string = "class1|class2|class3 path/to/resource".split(%r{[| ]})
=> ["class1", "class2", "class3", "path/to/resource"]
\w+(\|\w+)*\s+\w+(\/\w+)*
クラスの名前は、1 つ以上の単語文字で構成されていると想定しました。それ以上に制限されている場合は調整します。たとえば、class\d+
番号付きクラスのみに使用します。
クラス名の後に任意の数の [クラス名が続くパイプ] があります。次に、1 つ以上のスペースがあり、その後に基本的に同じことが続きますが、今回はパイプの代わりにスラッシュを使用しています。
パイプとスラッシュの両方をバックスラッシュでエスケープしました。
私は2つの分割を行うだけです:
string = 'class1|class2|class3 path/to/resource'
p string.split.first.split('|') #=> ["class1", "class2", "class3"]