我有一个元字段“my\\u meta\\u field”,其中可能包含以下示例用户的内容:
用户A
99999
559225
12519
用户B
5020492
99999
125191
用户C
194295
1199999
换行符是\\r\\n或\\n。这是在Mac for dev和Unix for server-side上,因此可能是。
如果目标编号为99999 然后我应该得到用户a和B的匹配。需要小心不要匹配像用户C这样的情况,其中数字的目标在“1199999”内
匹配行的开头,或\\n,或开头的\\r\\n应该解决这个问题。
$user = get_users( array(
\'meta_query\' => array(
array(
\'key\' => \'my_meta_field\',
\'value\' => \'(^|\\\\n|\\\\r\\\\n)99999\',
\'compare\' => \'REGEXP\',
),
),
) );
不幸的是,这只与用户A正确匹配。它与用户B不匹配。此正则表达式在诸如
https://regex101.com/.
我尝试过不同的格式,例如:(^|\\n|\\r\\n)99999
如果有人知道这里出了什么问题,请提前感谢。
最合适的回答,由SO网友:Curtis 整理而成
我发现了这个问题,还修复了regex中的一个bug。
最终代码:
\'meta_query\' => array(
array(
\'key\' => \'my_meta_field\',
\'value\' => "(^|\\n|\\r\\n)99999($|\\n|\\r\\n)",
\'compare\' => \'REGEXP\',
),
),
这里的问题是Wordpress在特殊字符上添加了额外的反斜杠。通过将表达式用双引号括起来,解决了这个问题。
还添加了字符串结尾/在目标值末尾捕获新行。