使用正则表达式在字符串中选择子字符串“_id”

时间:2015-11-09 10:16:31

标签: php regex

我需要正则表达式的帮助。我需要选择“_id”并将其替换为“_ID”,但不知道如何完全正确。 示例字符串:“test_id”必须为“test_ID”,但“test_identification_number”不能为“test_IDentification_number”。

目前我有这样的正则表达式:/(?:_ id $ | id )/,但它不起作用,因为它无法用_id替换_ID_id__ID_

感谢。

**编辑:我使用PHP。

4 个答案:

答案 0 :(得分:2)

我使用这种模式:

preg_replace('/(?<=_)id(\b|_)/', 'ID$1', $string);

demo

工作原理:

  • (?<=_):积极的后视:模式的其余部分只有在前面带有下划线的情况下才会匹配。下划线本身未被捕获(即未被替换)
  • id:字符串文字 - &gt;匹配 id ,显然是
  • (\b|_):对字边界(\b)或下划线进行分组匹配。这种分组是必需的,因为像(?:\b|_)这样的正面预测会捕获尾随下划线(因此您必须将其替换为'ID$1',但如果前瞻与单词边界匹配则会失败( see regex101

答案 1 :(得分:0)

您可以使用单词边界限定符:\b仅匹配字符串的开头,字符串的结尾或前一个或后一个字符不是单词字符。

所以_id\b应该只匹配以_id结尾的单词,而不是_identifier

答案 2 :(得分:0)

My solution

搜索字符串: /(?<=_)id\b/g

替换字符串: ID

答案 3 :(得分:0)

使用preg_replace根据正则表达式进行替换。

$string_modified = preg_replace('/_id(\b|_)/','_ID$1',$string);