我在Perl正则表达式语法中遇到查找和替换问题:
我有以下几行:
`@Override
public void onNothingSelected(AdapterView<?> parent) {}
所以我必须找到字符串 SQL_log ,但只用 SIZE = 1024
替换 SIZE =如何使用正则表达式PCRE实现这一目标?
答案 0 :(得分:2)
所有解决方案再一次将所有内容都塞进一个正则表达式中。我不明白为什么人们会这样做;它不会与语言的任何其他部分一起发生
这更清楚地写成
if ( /NAME \s* = \s* \[SQL_log\]/x ) {
s/SIZE \s* = \s* \K \d+/1024/x;
}
答案 1 :(得分:1)
我找到了答案!
搜索:
(IGP_log.*?\bSIZE\b\s=)(\s[0-9]+)
替换:
\1 1024
或
${1} 1024
答案 2 :(得分:1)
如果您保证在同一行上不会有多个SQL_log记录,或者SQL_log LOG记录总是有&#34; NAME =&#34; AND&#34; SIZE =&#34;按此顺序,以下应该是一个安全的解决方案:
s/\b(NAME\s*=\s*\[SQL_log\].+?\bSIZE\s*=\s*)[^,)]*/${1}1024 KB/
如果您无法保证&#34; NAME =&#34;和&#34; SIZE =&#34;总是按顺序排列,但你可以保证每行不会超过一个,你还需要这个:
s/\b(SIZE\s*=\s*)[^,]*(.+?\bNAME\s*=\s*\[SQL_log\])/${1}1024 KB$2/
答案 3 :(得分:-1)
捕获目标之前的所有内容并将其放回替换中:
apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'
android {
//...
buildTypes {
//...
}
}
dependencies {
compile 'com.android.support:support-v4:19.1.0'
compile files('libs/bolts-android-1.1.3.jar')
compile 'com.google.android.gms:play-services:8.1.0'
}
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.google.gms:google-services:1.4.0-beta3'
}
}
测试代码:
$x =~ s/^(.*?SQL_log.*?SIZE = )\d+/${1}1024/;
输出:
$x = "foo SQL_log bar SIZE = 5012 baz";
$x =~ s/^(.*?SQL_log.*?SIZE = )\d+/${1}1024/;
print $x;