我需要正则表达式的帮助。我需要选择“_id”并将其替换为“_ID”,但不知道如何完全正确。 示例字符串:“test_id”必须为“test_ID”,但“test_identification_number”不能为“test_IDentification_number”。
目前我有这样的正则表达式:/(?:_ id $ | id )/,但它不起作用,因为它无法用_id
替换_ID
和_id_
与_ID_
。
感谢。
**编辑:我使用PHP。
答案 0 :(得分:2)
我使用这种模式:
preg_replace('/(?<=_)id(\b|_)/', 'ID$1', $string);
工作原理:
(?<=_)
:积极的后视:模式的其余部分只有在前面带有下划线的情况下才会匹配。下划线本身未被捕获(即未被替换)id
:字符串文字 - &gt;匹配 id ,显然是(\b|_)
:对字边界(\b
)或下划线进行分组匹配。这种分组是必需的,因为像(?:\b|_)
这样的正面预测会捕获尾随下划线(因此您必须将其替换为'ID$1'
,但如果前瞻与单词边界匹配则会失败( see regex101)答案 1 :(得分:0)
您可以使用单词边界限定符:\b
仅匹配字符串的开头,字符串的结尾或前一个或后一个字符不是单词字符。
所以_id\b
应该只匹配以_id
结尾的单词,而不是_identifier
。
答案 2 :(得分:0)
答案 3 :(得分:0)
使用preg_replace根据正则表达式进行替换。
$string_modified = preg_replace('/_id(\b|_)/','_ID$1',$string);