免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2254 | 回复: 4
打印 上一主题 下一主题

perl 匹配部分行? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-11-21 18:16 |只看该作者 |倒序浏览
本帖最后由 tianting002 于 2011-11-21 18:18 编辑

perl 脚本如何匹配到以下红色部分?



<?xml version="1.0" encoding="utf-8"?>
<manifest
        xmlns:android="==============================="
        android:versionCode="ty"
        android:versionName="ty"
        android:installLocation="0"
        package="com.test.qc"
        >
        <supports-screens
                android:smallScreens="false"
                android:normalScreens="true"
                android:largeScreens="true"
                >
        </supports-screens>
        <application
                android:theme="pic"
                android:label="label11"
                android:icon="icon1"
                android:debuggable="false"
                >
                <uses-library
                        android:name="com.test.ok.proxy_1"
                        android:required="false"
                        >
                </uses-library>
                <activity
                        android:label="label11"
                        android:name=".activity.MainActivity"
                        android:screenOrientation="1"
                        android:configChanges="0x000000A0"
                        >
                        <meta-data
                                android:name="Bitrate"
                                android:value="0"
                                >
                        </meta-data>
                        <meta-data
                                android:name="com.test.applicationid"
                                android:value="com.test.sdo.appid.1"
                                >
                        </meta-data>
                        <meta-data
                                android:name="fingerprintOnDevice"
                                android:value="true"
                                >
                        </meta-data>
                        <meta-data
                                android:name="RecognitionTimeoutSeconds"
                                android:value="40"
                                >
                        </meta-data>
                        <meta-data
                                android:name="ChartTimeoutSeconds"
                                android:value="60"
                                >
                        </meta-data>
                </activity>
                <activity
                        android:name=".activity.HistoryActivity"
                        >
                        <meta-data
                                android:name="RecognitionTimeoutSeconds"
                                android:value="40"
                                >
                        </meta-data>
                </activity>
                <activity
                        android:name=".activity.ChartActivity"
                        >
                </activity>
                <activity
                        android:name=".activity.RecordActivity"
                        >
                        <meta-data
                                android:name="RecognitionTimeoutSeconds"
                                android:value="40"
                                >
                        </meta-data>
                </activity>
                <provider
                        android:name="com.test.qc.model.android.provider.HistoryProvider"
                        android:authorities="com.test.qc.History"
                        >
                </provider>
                <provider
                        android:name="com.test.qc.model.android.provider.HistoryProviderInternal"
                        android:permission="com.test.permission.qc3.HISTORY"
                        android:authorities="com.test.qc.internal.History"
                        >
                </provider>
                <permission
                        android:name="com.test.permission.qc3.HISTORY"
                        android:protectionLevel="2"
                        >
                </permission>
                <provider
                        android:name="com.test.qc.model.android.provider.StoreProvider"
                        android:authorities="com.test.qc.Stores"
                        >
                </provider>
                <service
                        android:name="com.test.art.comp.fingerprintservice.FingerPrintService"
                        >
                </service>
                <service
                        android:name="com.test.qc.model.android.service.RecognitionService"
                        >
                </service>
                <service
                        android:name="com.test.qc.widget.WidgetService"
                        >
                </service>
                <service
                        android:name=".model.android.service.okLikeService"
                        >
                        <intent-filter
                                >
                                <action
                                        android:name="com.test.qc.intent.FB_LIKE_ALLOWED_SERVICE"
                                        >
                                </action>
                        </intent-filter>
                        <meta-data
                                android:name="Bitrate"
                                android:value="0"
                                >
                        </meta-data>
                        <meta-data
                                android:name="com.test.applicationid"
                                android:value="com.test.sdo.appid.1"
                                >
                        </meta-data>
                        <meta-data
                                android:name="fingerprintOnDevice"
                                android:value="true"
                                >
                        </meta-data>
                </service>
                <activity
                        android:name=".activity.TrackDetailsActivity"
                        android:screenOrientation="1"
                        android:configChanges="0x000000A0"
                        >
                </activity>
                <activity
                        android:name=".activity.AppVersionActivity"
                        >
                </activity>
                <activity
                        android:name=".activity.ArtistInfoActivity"
                        android:screenOrientation="1"
                        android:configChanges="0x000000A0"
                        >
                </activity>
                <activity
                        android:name=".activity.HistoryDeleteActivity"
                        android:screenOrientation="1"
                        android:configChanges="0x000000A0"
                        >
                </activity>
                <receiver
                        android:name=".widget.qcWidgetProvider"
                        >
                        <intent-filter
                                >
                                <action
                                        android:name="android.intent.action.SCREEN_OFF"
                                        >
                                </action>
                                <action
                                        android:name="android.intent.action.SCREEN_ON"
                                        >
                                </action>
                                <action
                                        android:name="android.appwidget.action.APPWIDGET_UPDATE"
                                        >
                                </action>
                                <action
                                        android:name="com.test.qc.WIDGET_UPDATE"
                                        >
                                </action>
                        </intent-filter>
                        <meta-data
                                android:name="android.appwidget.provider"
                                android:resource="@7F050000"
                                >
                        </meta-data>
                </receiver>
                <activity
                        android:name=".activity.WidgetHandlerActivity"
                        android:launchMode="3"
                        android:screenOrientation="1"
                        android:configChanges="0x000000A0"
                        >
                        <meta-data
                                android:name="com.test.applicationid"
                                android:value="com.test.sdo.appid.1"
                                >
                        </meta-data>
                        <meta-data
                                android:name="Bitrate"
                                android:value="0"
                                >
                        </meta-data>
                        <meta-data
                                android:name="fingerprintOnDevice"
                                android:value="true"
                                >
                        </meta-data>
                        <intent-filter
                                >
                                <action
                                        android:name="android.intent.action.MAIN"
                                        >
                                </action>
                               
            <action
                                        android:name="com.test.qc.intent.action.LAUNCH"
                                        >
                                </action>
                                <action
                                        android:name="com.test.extras.livekey"
                                        >
                                </action>
                                <category
                                        android:name="android.intent.category.LAUNCHER"
                                        >
                                </category>
                                <category
                                        android:name="android.intent.category.DEFAULT"
                                        >
                                </category>
                        </intent-filter>
                </activity>
                <activity
                        android:name=".activity.LikeActivity"
                        android:screenOrientation="1"
                        android:configChanges="0x000000A0"
                        >
                        <meta-data
                                android:name="Bitrate"
                                android:value="0"
                                >
                        </meta-data>
                        <meta-data
                                android:name="com.test.applicationid"
                                android:value="com.test.sdo.appid.1"
                                >
                        </meta-data>
                        <meta-data
                                android:name="fingerprintOnDevice"
                                android:value="true"
                                >
                        </meta-data>
                        <meta-data
                                android:name="RecognitionTimeoutSeconds"
                                android:value="40"
                                >
                        </meta-data>
                        <intent-filter
                                >
                                <action
                                        android:name="com.test.qc.intent.action.LIKE"
                                        >
                                </action>
                                <category
                                        android:name="android.intent.category.DEFAULT"
                                        >
                                </category>
                        </intent-filter>
                </activity>
                <activity
                        android:name=".activity.WebActivity"
                        android:screenOrientation="1"
                        android:configChanges="0x000000A0"
                        >
                </activity>
                <activity
                        android:name=".activity.BiographyActivity"
                        android:screenOrientation="1"
                        android:configChanges="0x000000A0"
                        >
                </activity>
        </application>
        <uses-permission
                android:name="android.permission.INTERNET"
                >
        </uses-permission>
        <uses-permission
                android:name="android.permission.RECORD_AUDIO"
                >
        </uses-permission>
        <uses-permission
                android:name="android.permission.READ_PHONE_STATE"
                >
        </uses-permission>
        <uses-permission
                android:name="android.permission.VIBRATE"
                >
        </uses-permission>
        <uses-permission
                android:name="android.permission.ACCESS_NETWORK_STATE"
                >
        </uses-permission>
        <uses-permission
                android:name="android.permission.WRITE_EXTERNAL_STORAGE"
                >
        </uses-permission>
        <uses-permission
                android:name="android.permission.ACCESS_FINE_LOCATION"
                >
        </uses-permission>
        <uses-permission
                android:name="com.test.permission.CREDENTartLMANAGER"
                >
        </uses-permission>
        <uses-permission
                android:name="com.test.permission.INSTALL_APPLICATION"
                >
        </uses-permission>
        <uses-permission
                android:name="com.test.permission.USERAGENT"
                >
        </uses-permission>
        <uses-permission
                android:name="com.test.permission.CUSTOMIZATION"
                >
        </uses-permission>
        <uses-permission
                android:name="android.permission.GET_ACCOUNTS"
                >
        </uses-permission>
        <uses-permission
                android:name="android.permission.WAKE_LOCK"
                >
        </uses-permission>
        <uses-sdk
                android:minSdkVersion="8"
                >
        </uses-sdk>
</manifest>

论坛徽章:
0
2 [报告]
发表于 2011-11-21 19:09 |只看该作者
其实我最终想得到的是:
                        android:name=".activity.WidgetHandlerActivity"
                        android:launchMode="3"
                        android:screenOrientation="1"
                        android:configChanges="0x000000A0"
                        >
                        <meta-data
                                android:name="com.test.applicationid"
                                android:value="com.test.sdo.appid.1"
                                >
                        </meta-data>
                        <meta-data
                                android:name="Bitrate"
                                android:value="0"
                                >
                        </meta-data>
                        <meta-data
                                android:name="fingerprintOnDevice"
                                android:value="true"
                                >
                        </meta-data>
                        <intent-filter
                                >
                                <action
                                        android:name="android.intent.action.MAIN"

然后匹配到android:name=".activity.WidgetHandlerActivity"

需求是这样的,先要满足行 android:name="android.intent.action.MAIN 最终只匹配到行android:name=".activity.WidgetHandlerActivity"。

该如何实现?

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
3 [报告]
发表于 2011-11-21 19:25 |只看该作者
解析整个 xml 然后提取相应的内容

论坛徽章:
0
4 [报告]
发表于 2011-11-21 21:02 |只看该作者
回复 3# zhlong8


    能否给个思路?

perl -ne 'print if /^START$/ .. /^END$/'

可以实现吗?

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
5 [报告]
发表于 2011-11-21 21:44 |只看该作者
How do I match XML, HTML, or other nasty, ugly things with a regex?
(contributed by brian d foy)
If you just want to get work done, use a module and forget about the regular expressions. The XML::Parser and HTML::Parser modules are good starts, although each namespace has other parsing modules specialized for certain tasks and different ways of doing it. Start at CPAN Search ( http://search.cpan.org ) and wonder at all the work people have done for you already! :)
The problem with things such as XML is that they have balanced text containing multiple levels of balanced text, but sometimes it isn't balanced text, as in an empty tag (<br/> , for instance). Even then, things can occur out-of-order. Just when you think you've got a pattern that matches your input, someone throws you a curveball.
If you'd like to do it the hard way, scratching and clawing your way toward a right answer but constantly being disappointed, besieged by bug reports, and weary from the inordinate amount of time you have to spend reinventing a triangular wheel, then there are several things you can try before you give up in frustration:
Solve the balanced text problem from another question in perlfaq6
Try the recursive regex features in Perl 5.10 and later. See perlre
Try defining a grammar using Perl 5.10's (?DEFINE) feature.
Break the problem down into sub-problems instead of trying to use a single regex
Convince everyone not to use XML or HTML in the first place
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP