我试图创建一个单一的正则表达式模式来匹配一个字符串,其中2个字段(用逗号分隔)可能是
这是一个日志文件,其中位置1是源用户名字段,位置2是目标用户字段,但如果存在域名,则两者都可以用反斜杠分隔(域\用户名)
我已经尝试了所有我能想到的东西,可以得到3分中的2分来匹配,但不是所有条件。以下是此字符串可能存在的变体。(something1和something2是在此条件之前和之后发生的已知模式)
something1 ,,, something2
something1,dstuser,something2
something1,dstdomain \ dstuser,something2
something1的是,srcdomain \ srcuser ,, something2
something1的是,srcdomain \ srcuser,dstdomain \ dstuser,something2
something1,srcuser,dstdomain \ dstuser,something2
something1,srcuser,dstuser,something2
something1,srcuser ,, something2
something1的是,srcdomain \ srcuser,dstuser,something2
something1的是,srcdomain \ srcuser,dstdomain \ dstuser,something2
例如,我试过这个:
^.*something1,(,|(?J)(?<src_username>[^\\]*),|(?<src_domain>.*?)\\(?<src_username>[^\\]*),).*?,something2*
这匹配当时的某些,但我很好奇是否可以使用单行正则表达式。
提前致谢....
答案 0 :(得分:1)
我认为你正在寻找这个正则表达式:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="<MyKey>" />
</application>
检查demo
我正在广泛使用否定的字符类(?J)^.*something1,(?:,|(?<src_username>[^,\\]+),|(?<src_domain>[^,\\]+)\\(?<src_username>[^,\\]+),)(?:,|(?<dst_user>[^\\,]+),|(?<dst_domain>[^,\\]+)\\(?<dst_username>[^,\\]*),)something2.*
,以便不会过度匹配并停留在&#34; cell&#34;的范围内。此外,我使用[^,\\]
非捕获组来防止捕获的组混乱,并有助于保持输出清洁。