我在表单中有字符串,\d+_\d+我想在第二个数字中添加1.由于我的解释非常清楚,让我举几个例子:
这是我的第一次尝试:
$new = preg_replace("/(\d+)_(\d+)/", "$1_".((int)$2)+1, $old);
Run Code Online (Sandbox Code Playgroud)
这会导致语法错误:
解析错误:语法错误,意外T_LNUMBER,在[...] 201行上预期T_VARIABLE或'$'
这是我的第二次尝试
$new = preg_replace("/(\d+)_(\d+)/", "$1_".("$2"+1), $old);
Run Code Online (Sandbox Code Playgroud)
这会将$ old = 1234567_2转换为$ new = 1234567_1,这不是所需的效果
我的第三次尝试
$new = preg_replace("/(\d+)_(\d+)/", "$1_".((int)"$2"+1), $old);
Run Code Online (Sandbox Code Playgroud)
这产生了同样的结果.
通过做这些尝试,我意识到我不明白新的$ 1,$ 2,$ 3,..变量是如何工作的,所以我真的不知道还有什么可以尝试,因为看起来这些变量在退出时不再存在preg_replace函数...
有任何想法吗?
我想知道这里的反向引用有什么问题:
preg_match_all('/__\((\'|")([^\1]+)\1/', "__('match this') . 'not this'", $matches);
Run Code Online (Sandbox Code Playgroud)
它应该匹配__('')之间的字符串,但实际上它返回:
match this') . 'not this
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我正在尝试使用Python re.sub()将字符串与e字符匹配,并在e字符后面和lastdigit后立即插入花括号.例如:
12.34e56 to 12.34e{56}
1e10 to 1e{10}
Run Code Online (Sandbox Code Playgroud)
我似乎无法找到正确的正则表达式插入所需的花括号.例如,我可以像这样正确插入左括号:
>>> import re
>>> x = '12.34e10'
>>> pattern = re.compile(r'(e)')
>>> sub = z = re.sub(pattern, "\1e{", x)
>>> print(sub)
12.34e{10 # this is the correct placement for the left brace
Run Code Online (Sandbox Code Playgroud)
使用两个反向引用时出现问题.
>>> import re
>>> x = '12.34e10'
>>> pattern = re.compile(r'(e).+($)')
>>> sub = z = re.sub(pattern, "\1e{\2}", x)
>>> print(sub)
12.34e{} # this is not what I want, digits 10 have been …Run Code Online (Sandbox Code Playgroud) 有没有办法使用正则表达式拆分Java String并返回反向引用数组?
举个简单的例子,我想从简单的电子邮件地址(仅限字母)中提取用户名和提供商.
String pattern = "([a-z]+)@([a-z]+)\\.([a-z]{3})";
String email = "user@email.com";
String[] backrefs = backrefs(email,pattern);
System.out.println(backrefs[0]);
System.out.println(backrefs[1]);
System.out.println(backrefs[2]);
Run Code Online (Sandbox Code Playgroud)
这应该输出
user
email
com
Run Code Online (Sandbox Code Playgroud) 我可以找到很多的信息有关获取在JavaScript正则表达式的捕获组replace功能,使用$1,$2等等.但我真正需要的是反向引用捕获组在正则表达式本身的一种方式.
我需要将以下三个字符串与一个正则表达式匹配:
<--text-->
<**text**>
<++text++>
Run Code Online (Sandbox Code Playgroud)
text实际上在哪里[a-zA-Z]+.
我已经在Ruby中使用了这种模式:
/<([-+*]{2})(.+)\1>/
Run Code Online (Sandbox Code Playgroud)
别介意我(.+)在这里使用,但我很想知道如何\1在javascript中实现反向引用.有任何想法吗?
我想匹配Python文件的文档字符串.例如.
r""" Hello this is Foo
"""
Run Code Online (Sandbox Code Playgroud)
使用只"""应该足够开始.
>>> data = 'r""" Hello this is Foo\n """'
>>> def display(m):
... if not m:
... return None
... else:
... return '<Match: %r, groups=%r>' % (m.group(), m.groups())
...
>>> import re
>>> print display(re.match('r?"""(.*?)"""', data, re.S))
<Match: 'r""" Hello this is Foo\n """', groups=(' Hello this is Foo\n ',)>
>>> print display(re.match('r?(""")(.*?)\1', data, re.S))
None
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释为什么第一个表达式匹配而另一个不匹配?
有没有办法修改反向引用的值?
示例:在以下文本中
"this is a test"
Run Code Online (Sandbox Code Playgroud)
应该通过反向引用提取“测试”一词并插入到另一个文本中。
正则表达式:
(test)
Run Code Online (Sandbox Code Playgroud)
替代品:
"this is another \1"
Run Code Online (Sandbox Code Playgroud)
到目前为止效果很好。但现在的问题是,是否可以在插入之前修改反向引用。类似于将单词“test”转换为大写。
我认为它可能看起来像:
"this is another \to_upper\1"
Run Code Online (Sandbox Code Playgroud)
正则表达式的“标准”(是否有任何标准?)中是否定义了某些内容?
这按预期工作:
INPUT FILE src.txt:
ffmpeg -i uno.3gp
ffmpeg -i dos.3gp
ffmpeg -i tres.3gp
Run Code Online (Sandbox Code Playgroud)
命令:
sed 's/-i .*\./XXX/' <src.txt
Run Code Online (Sandbox Code Playgroud)
结果如预期:
ffmpeg XXX3gp
ffmpeg XXX3gp
ffmpeg XXX3gp
Run Code Online (Sandbox Code Playgroud)
那么为什么这些不能按预期工作:
命令:
sed 's/-i (.*)\./XXX/' <src.txt
Run Code Online (Sandbox Code Playgroud)
预期:
ffmpeg XXX3gp
ffmpeg XXX3gp
ffmpeg XXX3gp
Run Code Online (Sandbox Code Playgroud)
实际结果:
ffmpeg -i uno.3gp
ffmpeg -i dos.3gp
ffmpeg -i tres.3gp
Run Code Online (Sandbox Code Playgroud)
命令:
sed 's/-i (.*)\.3gp/\1.mp3/' <src.txt
Run Code Online (Sandbox Code Playgroud)
预期:
ffmpeg uno.mp3
ffmpeg dos.mp3
ffmpeg tres.mp3
Run Code Online (Sandbox Code Playgroud)
实际结果
sed: -e expression #1, char 18: invalid reference \1 on `s' command's RHS
Run Code Online (Sandbox Code Playgroud)
括号似乎不适用于分组,但我发现的所有教程和示例似乎都认为它们应该......
尝试使用Bash内置的正则表达式匹配来解析以下类型的字符串,这些字符串将被转换为Perl替换表达式(引号不是数据的一部分)
'~#A#B#'
#^ ^ ^-- Replacement string.
#| +---- Pattern string.
#+------ Regular expression indicator (no need to escape strings A and B),
# which is only allowed if strings A and B are surrounded with ##.
# Strings A and B may not contain #, but are allowed to have ~.
'#A#B#'
#^------ When regex indicator is missing, strings A and B will be escaped.
'A#B'
# Simplified form of '#A#B#', i. e. without the enclosing ##.
# Still …Run Code Online (Sandbox Code Playgroud) 在一个文件中,例如:
self.phrase
self.phrases
self.phrase.lower()
self.phrase_lowered
self.phrases[self.phrase]
Run Code Online (Sandbox Code Playgroud)
我想更换所有self.phrase有self._phrase,除了self.phrases可以得到:
self._phrase
self.phrases
self._phrase.lower()
self._phrase_lowered
self.phrases[self._phrase]
Run Code Online (Sandbox Code Playgroud)
在我试过的正则表达式中,第一个(我认为可行的正则表达式)是:
:%s/self\.phrase[^s]/self\._phrase\1/gc
Run Code Online (Sandbox Code Playgroud)
但它没有用.
backreference ×10
regex ×10
php ×2
python ×2
bash ×1
grouping ×1
java ×1
javascript ×1
parentheses ×1
preg-replace ×1
sed ×1
vim ×1