• 締切済み

正規表現について

もしよろしければご教示願います。 現在、Androidで「Runtime.getRuntime().exec("top -n 1 -d 1")」を使い、下記のように表示できるところまではできましたが、特定の文字列を取り出すことができません。 CPU: 0.0% usr 0.0% sys 0.0% nic 100% idle 0.0% io 0.0% irq 0.0% sirq Load average: 0.12 0.80 1.13 1/394 9673 PID PPID USER STAT VSZ %MEM %CPU COMMAND 9673 9672 root R 712 0.1 0.0 top -d 1 -n 1 2489 2386 system S 369m 87.7 0.0 system_server 3101 2386 app_23 S 304m 72.3 0.0 com.android.browser 2581 2386 radio S 279m 66.3 0.0 com.android.phone ・・・ 特定の文字列とはCOMMAND部分です。system_server、com.android.browser等のCOMMAND部分のみを抽出し表示する場合、どのような正規表現で抽出したよいのか、お手数ですがご教示願います。

  • Java
  • 回答数3
  • ありがとう数3

みんなの回答

  • 55wantan
  • ベストアンサー率100% (2/2)
回答No.3

#1です。 ちょっと言葉足らずでしたね。 split(String regex, int limit) を使えば、分割する回数を限定できるので、top -d 1 -n 1 などにも対応できますね。

masaki-oo
質問者

お礼

再度回答して頂きまして、ありがとうございました。 ご教示頂いた内容で検討してみます。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

「最後の要素を取り出す」だと top の行みたいに引数を持っているときに困りそうな気がします>#1. 「COMMAND」がどこにあるかは特定できるはずなので, そこに対応する要素だけを取り出す (またはそれ以降の要素を取り出す) 方がいいと思います. 結局は「COMMAND部分」をどう解釈するという問題に帰着するんだけど.

masaki-oo
質問者

お礼

返事が遅れて申し訳ありませんでした。 回答して頂きまして、ありがとうございました。

  • 55wantan
  • ベストアンサー率100% (2/2)
回答No.1

正規表現だとめんどくさそうなので、String#splitで配列に分割してから 最後のデータ取得するんじゃだめですかね?

masaki-oo
質問者

お礼

返事が遅れて申し訳ありませんでした。 回答ありがとうございました。 splitですね、これも一応は検討したのですが、よく分かってなくてw でももう一度検討したいと思います。

関連するQ&A

  • top commandの正規表現

     標記について、例えば、topコマンドを実行後、 11:00am up 1 day, 8:23, 1 user, load average: 0.11, 0.03, 0.01 54 processes: 53 sleeping, 1 running, 0 zombie, 0 stopped CPU states: 0.9% user, 1.7% system, 0.0% nice, 97.2% idle Mem: 62972K av, 61388K used, 1584K free, 8948K shrd, 1332K buff Swap: 266072K av, 3564K used, 262508K free 50120K cached PID USER PRI NI SIZE RSS SHARE STAT LIB %CPU %MEM TIME COMMAND 3319 number 15 0 1020 1020 836 R 0 1.3 1.6 0:00 top 415 root 11 0 364 344 272 S 0 0.5 0.5 0:00 crond 1357 number 7 0 2408 2392 2020 S 0 0.1 3.7 4:38 smbd (続く) と表示されますが、このうちCOMMAND部分である「top」や「crond」のみを取り出す正規表現をご教示願います。  なお、使用している言語はAndroid/Javaです。

  • perlの正規表現 (ワンライナー)

    以下のような文字列から2つの要素だけ抽出するようなperl/rubyのスクリプトはどのように書いたらいいでしょうか? できればワンライナーで実現したいです(が、ワンライナーとしてはちょっと複雑なのでしょうか。。。) 元の文字列 -test t001 +opt0=1024 -N n_paramX -seed 1 -test t002 +opt0=1024 -opt1=2486 -N n_paramY -test t003 +opt3=1234 -N n_paramZ ... 整形後の文字列 t001 n_paramX t002 n_paramY t003 n_praramZ ※ 各行に -test と -N が必ず存在していることは仮定してOKです スクリプトで記述した場合: while(<>) { /\-test (\S+)/; $match00 = $1; /\-N (\S+)/; $match01 = $1; print "$match00 $match01\n"; } よろしくお願いします

  • 正規表現で指定したURLに飛びたいのですが・・・・

    お世話になっております。 VB2005ユーザーです。 こちらで回答をいただくみなさんには頭が下がる思いでいっぱいです。 もう少々、お力をお貸しいただけませんか。 宜しくお願いいたします。 当方、環境はVB2005です。 WebBrowserにて、HTMLを操作していくプログラムに挑戦しています。 ある特定の文字列のリンクに飛ぶには、正規表現を使用し、URLを抽出するというところまでわかったのですが、 この正規表現の部分をwindowsフォーム内のテキストボックスの文字列にするにはどのようにしたらよいでしょうか? 以下は当方がチャレンジしましたが、無理だったパターンです。 Dim r As Regex = New Regex( _ "<a\s+[^>]*href\s*=\s*(?:""(?<1>[^""]*)""|(?<1>[^\s>]+))[^>]*\s*.*" + TextBox1.text, _ RegexOptions.IgnoreCase Or RegexOptions.Compiled) Dim m As Match = r.Match(.Document.Body.InnerHtml) Dim St As String = m.Groups(1).Value '拾ってきたコード .Navigate(St) ・・・というようにしました。 上記の「+ TextBox1.text」の部分にテキストボックス内の文字列を挿入したいのです。 「+ TextBox1.text」の箇所を「TextBox1.text"」とすれば「TextBox1.text」自体を探してしまいますし・・・。 ちょっと行き詰ってしまいまして。 ご教授いただければ幸いでございます。 宜しくお願いいたします!!

  • 文字列の順番を指定して条件づける関数 エクセル

    添付ファイルを参照いただきたいのですが、 アルファベットのS,M,J,Nで構成される3つの文字列があります。 (別シートにあるデータからif関数で条件に合致したものにそれぞれの3つの文字列が入っています。) 現状として1つの行に2つ以上文字列があったら★をつけているのですが、ここから、かつ、文字列の順番がバラバラのもののみ抽出したいです。 例えば、黄色ハイライトが該当します。1つ目の文字列がSとM,2つ目がMとJ、3つめがJとSなので、3つとも順番が違うので該当。 例えば、緑が該当しません。1つ目と3つめがMとSで同じ。 関数で抽出するにはどうすればいいでしょうか?

  • 特定文字列間の文字列の抽出の際についての質問なのですが、

    特定文字列間の文字列の抽出の際についての質問なのですが、 例 xxxxxaiueoyyyyyaiueoyyyyy となっている場合aiueoだけを抽出したいのですが、 sed -n 's/.*xxxxx\(.*\)yyyyy.*/\1/p' とすると aiueoyyyyyaiueo が出力されてしまいます。 エンド文字が複数あった場合最初にマッチしたものまでの抽出は どのようにしたら宜しいのでしょうか?

  • スクリプト中に日本語を表示させたい。

    現在top監視スクリプト作成中なのですが、内容に日本語を 含めたくとも文字化けしてしまいます。 #!/bin/sh AVE=`uptime | sed 's/[.,]//g' | awk '{print $(NF-2)}'` if [ $AVE -gt 100 ];then echo "`date +%m/%d/%a/;` `uptime`" >> ./top.$$ top -b -n1 |awk '{if((5>=NR)&&(2<=NR)){print}}' >> ./top.$$ echo ----------------------------------------------------------------------------- >> ./top.$$ printf "USER PID %%CPU %%MEM VSZ RSS TTY STAT START TIME COMMAND\n" >> ./top.$$ ps aux |sort +4r |head -10 >> ./top.$$  >> ./top.$$ CPU負荷平均率が$AVEを超えました。 >> ./top.$$ fi 文字コードを指定するnkfを試しても文字化けは変わらず。 どうしたら文字化けせずにログを保存できますでしょうか

  • エクセル 複数条件抽出について

    エクセル2013を使用しています。 データシートより複数条件に当てはまるデータを 別のシートへ必要な項目のみ抽出する方法(関数orマクロ)をお教え下さい。 データシート:A列からU列まで様々なデータが入力されている。 抽出条件:H列とN列 抽出する項目:C列・I列・M列・O列・Q列・R列・S列 (抽出する項目は増える可能性有) 複数条件の抽出はフィルタオプションで出来たのですが、 抽出が必要な項目を指定する方法が分かりませんでした。 宜しくお願いします。

  • sedなどで、特定の文字列内の数値を抽出したい

    sedなどで、特定の文字列内の数値を抽出したい シェルスクリプト内で、sedなどを使って特定の文字列内の文字列を抽出したいのですが、どうすればいいでしょうか? たとえば、job 999 at 2016-09-28 00:00のなかから、job ~ at内の「999」を抜き出したいです。 echo job 999 at 2016-09-28 00:00 | sed -e 's///g'... のようにして実行させたいです。

  • CGIで受け取った日本語文字列を正規表現で

    perlでcgiを作っています。 テキストボックスに入れてもらった文字列から正規表現で数字を抽出します。 以下のように、組むと "USA"のような半角英数はただしくマッチしますが、 "アメリカ"や"ドル"などはマッチしません。簡単に解決する方法をお教えください。 my $text = $in_data{'data_text'}; $text =~ tr/+/ /; $text =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg; $text =~ s/[<>"'&\r\n]//g; $text =~ s/&/&amp;/g; $text =~ s/</&lt;/g; $text =~ s/>/&gt;/g; $text =~ s/"/&quot;/g; $text =~ s/'/'/g; $text =~ s/\r\n/<br>/g; $text =~ s/\n/<br>/g; $text =~ s/\r/<br>/g; if ($text =~ /USA (\d+) dollars/){ print "USA $1\n"; } if ($text =~ /アメリカ (\d+\.\d+) ドル/){ print "アメリカ $1\n"; } exit;

    • ベストアンサー
    • Perl
  • VBAを使ってHTMLソースから特定の文字列を抽出したいと思っています

    VBAを使ってHTMLソースから特定の文字列を抽出したいと思っています。 正規表現を利用してタグに挟まれた文字を抽出したいのですがうまくいきません。 タグごと抽出する方法でも構わないので教えてください。 例えば <a href="www.yahoo.com△">○○○</a>   ・・・<1> ※△は(www.yahoo.com)+(半角数字1文字) ※○○○は1文字以上の全角文字 このようなパターンの文字列(<1>を丸ごと)を抜き出すには どのような正規表現を書けばよいでしょうか? 単に<a href ではじまって </a>  で終わる文字列であれば <a href.*</a> で良いと思うのですが、もう少し範囲を絞れば目的の文字列だけを抽出できるので ぜひ実現させたいと思っています。宜しくお願いします。