2016-10-17 10 views
0

ヘッドロックの後、私はbashとregexに関するいくつかの助けを求める。
リテラルの空の括弧のシーケンスに一致させたい。
これらは以下のようにそれぞれ、互いにそれぞれオンを開閉しなければならない:空のリテラルカッコシーケンスの一致をテストする最短方法

一致する: "の" または "()" または "()()()()()()"
一致しない "(" または "((()()))" または "))()))()()"

は、ここに私が試したものです。 ($sは、入力文字列が含まれている)

  • かろうじて($s="."を除く)動作sedと代替溶液、

    [ `echo $s|sed 's/\(()\)*/./'` = "." ]&&echo true||echo false 
    
  • ウェル

    を行っていない[[ <arg1> =~ <arg2> ]]で所望の形状、
    [[ $s =~ \(()\)* ]]&&echo true||echo false 
    

あります私の目的はできるだけ最短のコードを生成することです(個人的な挑戦)。
誰かが私を助けてくれますか? : '(

+0

私は 'true'のか'偽たい'パターン全体に応じて一致するかどうかを判断する。内部の '()'がマッチしていても '((())))')で 'true'を取得したくありません。 –

+0

Hmm。それは実際に私たちができることです。 –

+0

ところで、これはあなたが遭遇した実用的な問題ではなく、パズルとして作成されているので、実際は[Puzzles&Code Golf SE](http://codegolf.stackexchange.com/)に属しています。 http://stackoverflow.com/help/on-topicに従って、「実用的」はStackOverflowの命令の一部です。 –

答えて

2
#!/bin/bash 

re='^([(][)])*$' 
is_valid() { [[ $1 =~ $re ]]; } 

for test_case in '' '()' "()()()()()()" "(" "((()()))" "))()))()()"; do 
    if is_valid "$test_case"; then 
    echo "matches: $test_case" 
    else 
    echo "does not match: $test_case" 
    fi 
done 

...出力が追従するために:

matches: 
matches:() 
matches:()()()()()() 
does not match: (
does not match: ((()())) 
does not match:))()))()() 
+0

ありがとうございます**ロット**! '[$ s =〜^([(] [)])* $]] && echo true || echo false'は完璧です! –

+0

@RémiT。、 'a && b|| cは**ではありません** if aと同じです。次にb。 else c; 'a'が真であるにもかかわらず' c'を走らせることができます。 –

+0

私はそれを知っていた、私はできるだけ短くするためにこのトリックを使用しました! :) –

0

あなたがゼロ以上の出現を探しているようにだけあなたがsomething more powerfulを必要とする正規表現がネストされているどのように深い括弧数えることができないので、それがある

+0

これは一般的には真ですが、OPのドメインは十分に制限されており、不正行為をする可能性があります。 :) –

0

ですが、思わ正規表現では不可能です。。。正規表現()

の:^(\(\))*$

Pythonコード:

regex = "^(\(\))*$" 
search = re.search(regex, "()") 
print search.string 

出力:()

search = re.search(regex, "()()") 
print search.string 

が出力:()()

+0

ああ、彼らは外側の括弧の中にあるので、 '(()())' *は一致しないことを確かめたいです。目的は、ネストされていない括弧のみが一致することを保証することです。 –

+0

はい、その場合、入力の長さは一致の長さと比較できます。 – bits

+0

...その拡張機能を使って、残りの唯一の問題は、OPが明示的にこれをbash *で行う方法を求めていたことです。 –

関連する問題