2017-05-21 1 views
1

여러 행에서 문자열을 얻을 :구문 분석 텍스트 파일 I 파일 <code>dumpsys.txt</code>이 포함되어 있습니다

볼 수 있듯이
... 
... 
Receiver Resolver Table: 
    Full MIME Types: 
     application/vnd.wap.mms-message: 
     53929df com.android.messaging/.receiver.MmsWapPushReceiver 
     592f62c com.android.messaging/.receiver.AbortMmsWapPushReceiver 
     89c68f5 com.android.messaging/.receiver.MmsWapPushDeliverReceiver 

    Base MIME Types: 
     application: 
     53929df com.android.messaging/.receiver.MmsWapPushReceiver 
     592f62c com.android.messaging/.receiver.AbortMmsWapPushReceiver 
     89c68f5 com.android.messaging/.receiver.MmsWapPushDeliverReceiver 

    Schemes: 
     content: 
     511868a com.android.messaging/.receiver.SendStatusReceiver (3 filters) 

    Non-Data Actions: 
     android.intent.action.ACTION_DEFAULT_SMS_SUBSCRIPTION_CHANGED: 
     83084fb com.android.messaging/.receiver.DefaultSmsSubscriptionChangeReceiver 
     com.android.Bugle.intent.action.ACTION_NOTIFY_CONVERSATIONS_CHANGED: 
     a4f4918 com.android.messaging/.widget.BugleWidgetProvider 
     com.android.Bugle.intent.action.ACTION_NOTIFY_MESSAGES_CHANGED: 
     c979f71 com.android.messaging/.widget.WidgetConversationProvider 
     android.intent.action.DEVICE_STORAGE_LOW: 
     1898156 com.android.messaging/.receiver.StorageStatusReceiver 
... 
... 

Receiver Resolver Table라는 섹션 Non-Data Actions 일부 하위 섹션이 포함되어 있습니다. 다른 섹션에는 Non-Data Actions이라는 하위 섹션도있을 수 있습니다.

Non-Data ActionsReceiver Resolver Table 인 하위 문자열을 PHP의 정규식을 사용하여 추출하고 싶습니다. 필자의 경우 각 줄에 /. 뒤에 부분 문자열을 Non-Data Actions 아래에 넣고 싶습니다.

출력 예 :

receiver.DefaultSmsSubscriptionChangeReceiver 
widget.BugleWidgetProvider 
widget.WidgetConversationProvider 
receiver.StorageStatusReceiver 
+1

당신은 무엇을 시도? 이것은 자유 소프트웨어 작성 사이트가 아닙니다. 왜 아무 것도 쓰지 않은 채로 작성해야하는 이유를 설명하십시오. 추신 : 'dumpsys.txt' 파일의 최대 크기를 지정하면 유용합니다. –

+0

나는 그것에 대해 더 많이 읽은 후에 많은 정규식을 시도했다. 그러나 나는 유용한 것으로 끝날 수 없었다. – Aan

+0

귀하의 질문에 귀하의 시도를 추가하십시오. –

답변

1

내가 즉, 2 단계로이 분할 것 :

1 - 일치하는 Non-Data Actions:과 :

/Receiver Resolver Table:.*?Non-Data Actions:(.*?)^[\r\n]/sm 

2 - widget/receivers 일치 다음을 포함합니다 :

%/\.(.*?)$%sm 

$text = <<< EOF 
Receiver Resolver Table: 
    Full MIME Types: 
     application/vnd.wap.mms-message: 
     53929df com.android.messaging/.receiver.MmsWapPushReceiver 
     592f62c com.android.messaging/.receiver.AbortMmsWapPushReceiver 
     89c68f5 com.android.messaging/.receiver.MmsWapPushDeliverReceiver 

    Base MIME Types: 
     application: 
     53929df com.android.messaging/.receiver.MmsWapPushReceiver 
     592f62c com.android.messaging/.receiver.AbortMmsWapPushReceiver 
     89c68f5 com.android.messaging/.receiver.MmsWapPushDeliverReceiver 

    Schemes: 
     content: 
     511868a com.android.messaging/.receiver.SendStatusReceiver (3 filters) 

    Non-Data Actions: 
     android.intent.action.ACTION_DEFAULT_SMS_SUBSCRIPTION_CHANGED: 
     83084fb com.android.messaging/.receiver.DefaultSmsSubscriptionChangeReceiver 
     com.android.Bugle.intent.action.ACTION_NOTIFY_CONVERSATIONS_CHANGED: 
     a4f4918 com.android.messaging/.widget.BugleWidgetProvider 
     com.android.Bugle.intent.action.ACTION_NOTIFY_MESSAGES_CHANGED: 
     c979f71 com.android.messaging/.widget.WidgetConversationProvider 
     android.intent.action.DEVICE_STORAGE_LOW: 
     1898156 com.android.messaging/.receiver.StorageStatusReceiver 

    something: 
     content: 
     511868a com.android.messaging/.receiver.SendStatusReceiver (3 filters) 
EOF; 

preg_match_all('/Receiver Resolver Table:.*?Non-Data Actions:(.*?)^[\r\n]/sm', $text, $m, PREG_PATTERN_ORDER); 
$m = $m[1][0]; 

preg_match_all('%/\.(.*?)$%sm', $m, $m, PREG_PATTERN_ORDER); 
$m = $m[1]; 

print_r($m); 

출력 :

Array 
(
    [0] => receiver.DefaultSmsSubscriptionChangeReceiver 
    [1] => widget.BugleWidgetProvider 
    [2] => widget.WidgetConversationProvider 
    [3] => receiver.StorageStatusReceiver 
) 

PHP Demo


정규식 설명 :

1-Receiver Resolver Table:.*?Non-Data Actions:(.*?)^[\r\n]

Match the character string “Receiver Resolver Table:” literally (case insensitive) «Receiver Resolver Table:» 
Match any single character «.*?» 
    Between zero and unlimited times, as few times as possible, expanding as needed (lazy) «*?» 
Match the character string “Non-Data Actions:” literally (case insensitive) «Non-Data Actions:» 
Match the regex below and capture its match into backreference number 1 «(.*?)» 
    Match any single character «.*?» 
     Between zero and unlimited times, as few times as possible, expanding as needed (lazy) «*?» 
Assert position at the beginning of a line (at beginning of the string or after a line break character) (line feed) «^» 
Match a single character present in the list below «[\r\n]» 
    The carriage return character «\r» 
    The line feed character «\n» 

2-/\.(.*?)$

Match the character “/” literally «/» 
Match the character “.” literally «\.» 
Match the regex below and capture its match into backreference number 1 «(.*?)» 
    Match any single character «.*?» 
     Between zero and unlimited times, as few times as possible, expanding as needed (lazy) «*?» 
Assert position at the end of a line (at the end of the string or before a line break character) (line feed) «$» 
+0

감사합니다. @Pedro Lobito. 정규 표현식에 대한 설명을 추가 할 수 있습니까? 나는 이것에 대해 초보자이며 가능한 한 감사 할 것이다. – Aan

+0

@Aan 환영합니다. 정규식 설명을 게시했습니다. –